├── .github
└── workflows
│ ├── deploy_website.yml
│ └── format.yml
├── .gitignore
├── .vscode
└── settings.json
├── App
├── App.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── App.xcscheme
│ │ └── Clip.xcscheme
├── App
│ ├── App.entitlements
│ ├── App.swift
│ ├── App.xctestplan
│ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon 1.jpg
│ │ │ └── app_icon.jpg
│ │ ├── AppIcon.solidimagestack
│ │ │ ├── Back.solidimagestacklayer
│ │ │ │ ├── Content.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── vision_back.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── Front.solidimagestacklayer
│ │ │ │ ├── Content.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── vision_front.png
│ │ │ │ └── Contents.json
│ │ │ └── Middle.solidimagestacklayer
│ │ │ │ ├── Content.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── vision_middle.png
│ │ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Info.plist
│ ├── Preview Content
│ │ └── Preview Assets.xcassets
│ │ │ └── Contents.json
│ └── PrivacyInfo.xcprivacy
└── Clip
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ └── app_icon.jpg
│ └── Contents.json
│ ├── Clip.entitlements
│ ├── ClipApp.swift
│ ├── Info.plist
│ └── Preview Content
│ └── Preview Assets.xcassets
│ └── Contents.json
├── CNAME
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── MyLibrary
├── .gitignore
├── Package.resolved
├── Package.swift
├── Sources
│ ├── AppFeature
│ │ ├── AppView.swift
│ │ ├── Localizable.xcstrings
│ │ └── Media.xcassets
│ │ │ ├── Contents.json
│ │ │ └── rikoTokyo.symbolset
│ │ │ ├── Contents.json
│ │ │ └── RikoTokyo.svg
│ ├── DataClient
│ │ ├── Client.swift
│ │ └── Resources
│ │ │ ├── 2024-day1.json
│ │ │ ├── 2024-day2.json
│ │ │ ├── 2024-workshop.json
│ │ │ ├── 2025-day1.json
│ │ │ ├── 2025-day2.json
│ │ │ ├── 2025-day3.json
│ │ │ ├── organizers.json
│ │ │ ├── speakers.json
│ │ │ └── sponsors.json
│ ├── DependencyExtra
│ │ └── Safari.swift
│ ├── GuidanceFeature
│ │ ├── Guidance.swift
│ │ ├── Lines.swift
│ │ ├── Localizable.xcstrings
│ │ ├── Media.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── jr-1.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-1.jpg
│ │ │ ├── jr-10.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-10.jpg
│ │ │ ├── jr-11.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-11.jpg
│ │ │ ├── jr-2.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-2.jpg
│ │ │ ├── jr-3.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-3.jpg
│ │ │ ├── jr-4.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-4.jpg
│ │ │ ├── jr-5.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-5.jpg
│ │ │ ├── jr-6.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-6.jpg
│ │ │ ├── jr-7.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-7.jpg
│ │ │ ├── jr-8.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-8.jpg
│ │ │ ├── jr-9.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jr-9.jpg
│ │ │ └── metro-1.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── metro-1.png
│ │ └── Util.swift
│ ├── LiveTranslationFeature
│ │ ├── LiveTranslationView.swift
│ │ ├── Localizable.xcstrings
│ │ ├── Media.xcassets
│ │ │ ├── Contents.json
│ │ │ └── Flitto.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Flitto_D.png
│ │ │ │ └── Flitto_W.png
│ │ ├── SelectLanguageSheet.swift
│ │ └── ViewModel.swift
│ ├── MapKitClient
│ │ └── Client.swift
│ ├── ScheduleFeature
│ │ ├── Detail.swift
│ │ ├── Localizable.xcstrings
│ │ ├── Media.xcassets
│ │ │ ├── Akimu Hirai.imageset
│ │ │ │ ├── Akimu Hirai.jpg
│ │ │ │ └── Contents.json
│ │ │ ├── Audrey.imageset
│ │ │ │ ├── Audrey.jpg
│ │ │ │ └── Contents.json
│ │ │ ├── Brandon Williams.imageset
│ │ │ │ ├── Brandon Williams.jpg
│ │ │ │ └── Contents.json
│ │ │ ├── Chris Vasselli.imageset
│ │ │ │ ├── Chris Vasselli.jpg
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── Emad.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Emad.jpg
│ │ │ ├── Hiromu Tsuruta.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Hiromu Tsuruta.jpg
│ │ │ ├── Hisaki Sato.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Hisaki Sato.png
│ │ │ ├── Josh Holtz.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Josh Holtz.jpg
│ │ │ ├── Kazuhiro Kamakura.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Kazuhiro Kamakura.jpg
│ │ │ ├── Kazuya Hiruma.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Kazuya Hiruma.jpg
│ │ │ ├── Lil Ossa.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Lil Ossa.jpg
│ │ │ ├── Marcin Kryzyzanowski.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Marcin Kryzyzanowski.jpg
│ │ │ ├── SHIMOTORI Shigure.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SHIMOTORI Shigure.png
│ │ │ ├── Saleem Abdulrasool.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Saleem Abdulrasool.png
│ │ │ ├── Shinichiro Oba.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Shinichiro Oba.png
│ │ │ ├── Shogo Yoshida.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Shogo Yoshida.png
│ │ │ ├── Stephen Celis.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Stephen Celis.jpg
│ │ │ ├── Tim Condon.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Tim Condon.jpg
│ │ │ ├── Xingyu Wang.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Xingyu Wang.jpg
│ │ │ ├── Yunosuke Sakai.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Yunosuke Sakai.jpg
│ │ │ ├── Yusuke Kita.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Yusuke Kita.png
│ │ │ ├── Zamzam.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Zamzam.jpg
│ │ │ ├── akihiko_sato.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── akihiko_sato.png
│ │ │ ├── andrew_zheng.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── andrew_zheng.jpg
│ │ │ ├── benjamin_sandofsky.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── benjamin_sandofsky.jpg
│ │ │ ├── fromkk.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── fromkk.jpg
│ │ │ ├── giginet.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── giginet.png
│ │ │ ├── gui_rambo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── gui_rambo.jpg
│ │ │ ├── halordain.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── halordain.jpg
│ │ │ ├── ikesyo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ikesyo.jpg
│ │ │ ├── jeffrey_bergier.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── jeffrey_bergier.png
│ │ │ ├── katei.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── katei.jpg
│ │ │ ├── kishikawa_katsumi.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── kishikawa_katsumi.png
│ │ │ ├── konrad_ktoso_malawski.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── konrad_ktoso_malawski.jpg
│ │ │ ├── kosala_jayasekara.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── kosala_jayasekara.jpg
│ │ │ ├── krzysztof_zablocki.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── krzysztof_zablocki.jpg
│ │ │ ├── michael_petrie.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── michael_petrie.jpg
│ │ │ ├── mikaela_caron.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── mikaela_caron.png
│ │ │ ├── natasha.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── natasha.jpg
│ │ │ ├── nick_lockwood.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── nick_lockwood.jpg
│ │ │ ├── noah_martin.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── noah_martin.jpg
│ │ │ ├── noppe.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── noppe.jpg
│ │ │ ├── ojun.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ojun.jpg
│ │ │ ├── omochimetaru.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── omochimetaru.png
│ │ │ ├── paul_hudson.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── paul_hudson.jpg
│ │ │ ├── pradnya_nikam.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── pradnya_nikam.png
│ │ │ ├── rockname.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── rockname.png
│ │ │ ├── ryo_igarashi.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ryo_igarashi.png
│ │ │ ├── ryo_yamashita.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ryo_yamashita.png
│ │ │ ├── ryota_motonishi.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ryota_motonishi.jpg
│ │ │ ├── satoshi_hattori.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── satoshi_hattori.png
│ │ │ ├── sebastiaan_de_with.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── sebastiaan_de_with.jpg
│ │ │ ├── si_beaumont.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── si_beaumont.jpg
│ │ │ ├── sophie_hudson.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── sophie_hudson.png
│ │ │ ├── sugiy.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── sugiy.png
│ │ │ ├── tochi.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── tochi.png
│ │ │ ├── tokyo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── app_icon.jpg
│ │ │ ├── usagimaru.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── usagimaru.png
│ │ │ ├── vincent_pradeilles.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── vincent_pradeilles.jpg
│ │ │ ├── yamaken.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── yamaken.jpg
│ │ │ ├── yj_cheng.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── yj_cheng.jpg
│ │ │ └── yoshimasa_niwa.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── yoshimasa_niwa.png
│ │ └── Schedule.swift
│ ├── SharedModels
│ │ ├── Conference.swift
│ │ ├── Organizer.swift
│ │ ├── Speaker.swift
│ │ └── Sponsors.swift
│ ├── SponsorFeature
│ │ ├── Localizable.xcstrings
│ │ ├── Media.xcassets
│ │ │ ├── BRONZE_Luup.imageset
│ │ │ │ ├── BRONZE_Luup.png
│ │ │ │ └── Contents.json
│ │ │ ├── BRONZE_cybozu.imageset
│ │ │ │ ├── BRONZE_cybozu.png
│ │ │ │ └── Contents.json
│ │ │ ├── BRONZE_mirrativ.imageset
│ │ │ │ ├── BRONZE_mirrativ.png
│ │ │ │ └── Contents.json
│ │ │ ├── BRONZE_pixiv.imageset
│ │ │ │ ├── BRONZE_pixiv.png
│ │ │ │ └── Contents.json
│ │ │ ├── BRONZE_smartbank.imageset
│ │ │ │ ├── BRONZE_smartbank.png
│ │ │ │ └── Contents.json
│ │ │ ├── BRONZE_zozo.imageset
│ │ │ │ ├── BRONZE_zozo.png
│ │ │ │ └── Contents.json
│ │ │ ├── COMMUNITY_DroidKaigi.imageset
│ │ │ │ ├── COMMUNITY_DroidKaigi.png
│ │ │ │ └── Contents.json
│ │ │ ├── COMMUNITY_Emerge-Tools.imageset
│ │ │ │ ├── COMMUNITY_Emerge-Tools.png
│ │ │ │ └── Contents.json
│ │ │ ├── COMMUNITY_Flitto.imageset
│ │ │ │ ├── COMMUNITY_Flitto.png
│ │ │ │ └── Contents.json
│ │ │ ├── COMMUNITY_Scivone.imageset
│ │ │ │ ├── COMMUNITY_Scivone.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── GOLD_CyberAgent.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_CyberAgent.png
│ │ │ ├── GOLD_DMM.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_DMM.png
│ │ │ ├── GOLD_DeNA.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_DeNA.png
│ │ │ ├── GOLD_LINEヤフー.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_LINEヤフー.png
│ │ │ ├── GOLD_MIXI.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_MIXI.png
│ │ │ ├── GOLD_MagicPod.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_MagicPod.png
│ │ │ ├── GOLD_ORD.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_ORD.png
│ │ │ ├── GOLD_TVer.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_TVer.png
│ │ │ ├── GOLD_Tramline.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_Tramline.png
│ │ │ ├── GOLD_kinto-technologies.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_kinto-technologies.png
│ │ │ ├── GOLD_u-next.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── GOLD_u-next.png
│ │ │ ├── PLATINUM_RevenueCat.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── PLATINUM_RevenueCat.png
│ │ │ ├── SILVER_ moneyforward.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SILVER_ moneyforward.png
│ │ │ ├── SILVER_hatena.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SILVER_hatena.png
│ │ │ ├── SILVER_medley.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SILVER_medley.png
│ │ │ ├── SILVER_mercari.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SILVER_mercari.png
│ │ │ ├── SILVER_newmo.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SILVER_newmo.png
│ │ │ ├── SILVER_nomura.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── SILVER_nomura.png
│ │ │ ├── STUDENT_SCHOLARSHIP_kishikawakatsumi.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── STUDENT_SCHOLARSHIP_kishikawakatsumi.png
│ │ │ ├── individual_aaron.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_aaron.jpg
│ │ │ ├── individual_arasan01.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_arasan01.jpg
│ │ │ ├── individual_banjun.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_banjun.png
│ │ │ ├── individual_econa77.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_econa77.jpg
│ │ │ ├── individual_giginet.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_giginet.png
│ │ │ ├── individual_hcrane.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_hcrane.png
│ │ │ ├── individual_jollyjoester.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_jollyjoester.png
│ │ │ ├── individual_justin.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_justin.jpg
│ │ │ ├── individual_kishikawa_katsumi.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_kishikawa_katsumi.png
│ │ │ ├── individual_lihsuan_chen.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_lihsuan_chen.png
│ │ │ ├── individual_lovee.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_lovee.png
│ │ │ ├── individual_nao.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_nao.png
│ │ │ ├── individual_noppe.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_noppe.png
│ │ │ ├── individual_ooba.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_ooba.png
│ │ │ ├── individual_scenee.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_scenee.jpg
│ │ │ ├── individual_sean_labastille.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_sean_labastille.jpg
│ │ │ ├── individual_shiz.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_shiz.jpg
│ │ │ ├── individual_shogo4405.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_shogo4405.png
│ │ │ ├── individual_steven_hiroyuki_aoki.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_steven_hiroyuki_aoki.png
│ │ │ ├── individual_tamadeveloper.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_tamadeveloper.png
│ │ │ ├── individual_youichi_takatsu.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_youichi_takatsu.png
│ │ │ └── individual_yuji_fujisaka.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── individual_yuji_fujisaka.png
│ │ └── Sponsors.swift
│ └── trySwiftFeature
│ │ ├── Acknowledgements.swift
│ │ ├── Localizable.xcstrings
│ │ ├── Media.xcassets
│ │ ├── Contents.json
│ │ ├── Daiki.imageset
│ │ │ ├── Contents.json
│ │ │ └── Daiki.jpg
│ │ ├── Maru.imageset
│ │ │ ├── Contents.json
│ │ │ └── Maru.jpg
│ │ ├── Naoki.imageset
│ │ │ ├── Contents.json
│ │ │ └── Naoki.png
│ │ ├── Natasha.imageset
│ │ │ ├── Contents.json
│ │ │ └── Natasha.jpg
│ │ ├── Roku.imageset
│ │ │ ├── Contents.json
│ │ │ └── Roku.png
│ │ ├── TimOliver.imageset
│ │ │ ├── Contents.json
│ │ │ └── TimOliver.jpg
│ │ ├── akkey.imageset
│ │ │ ├── Contents.json
│ │ │ └── akkey.jpg
│ │ ├── elmetal.imageset
│ │ │ ├── Contents.json
│ │ │ └── elmetal.png
│ │ ├── kazu42.imageset
│ │ │ ├── Contents.json
│ │ │ └── kazu42.jpg
│ │ ├── logo.imageset
│ │ │ ├── Contents.json
│ │ │ └── event_riko.png
│ │ ├── saku.imageset
│ │ │ ├── Contents.json
│ │ │ └── saku.png
│ │ ├── satoshoco.imageset
│ │ │ ├── Contents.json
│ │ │ └── satoshoco.png
│ │ ├── sya-ri.imageset
│ │ │ ├── Contents.json
│ │ │ └── sya-ri.png
│ │ ├── tamaki.imageset
│ │ │ ├── Contents.json
│ │ │ └── tamaki.png
│ │ ├── yucovin.imageset
│ │ │ ├── Contents.json
│ │ │ └── yucovin.png
│ │ └── yutailang0119.imageset
│ │ │ ├── Contents.json
│ │ │ └── yutailang0119.png
│ │ ├── Organizers.swift
│ │ ├── Profile.swift
│ │ └── trySwift.swift
└── Tests
│ ├── ScheduleFeatureTests
│ ├── Mocks.swift
│ └── ScheduleTests.swift
│ ├── SponsorFeatureTests
│ ├── Mocks.swift
│ └── SponsorsTests.swift
│ └── trySwiftFeatureTests
│ ├── Mocks.swift
│ └── trySwiftTests.swift
├── README.md
├── Website
├── Assets
│ └── images
│ │ ├── favicon.png
│ │ ├── footer.png
│ │ ├── head.png
│ │ ├── intersect.svg
│ │ └── title.png
├── Package.resolved
├── Package.swift
└── Sources
│ ├── Components
│ ├── AccessComponent.swift
│ ├── CenterAlignedGrid.swift
│ ├── HeaderComponent.swift
│ ├── LanguageSelector.swift
│ ├── MainFooter.swift
│ ├── MainFooterWithBackground.swift
│ ├── MainNavigationBar.swift
│ ├── ModalFooterComponent.swift
│ ├── OrganizerComponent.swift
│ ├── OutlineComponent.swift
│ ├── SectionHeader.swift
│ ├── SectionListComponent.swift
│ ├── SpeakerComponent.swift
│ ├── SpeakerDetailComponent.swift
│ ├── SponsorComponent.swift
│ ├── TicketsComponent.swift
│ └── TimetableComponent.swift
│ ├── ConferenceWebsite.swift
│ ├── Extensions
│ ├── Date+.swift
│ ├── Ignite.Image+.swift
│ └── String+.swift
│ ├── Layouts
│ └── MainLayout.swift
│ ├── Pages
│ ├── CodeOfConduct.swift
│ ├── FAQ.swift
│ ├── Home.swift
│ ├── HomeSections.swift
│ ├── Localization.swift
│ └── PrivacyPolicy.swift
│ └── Resources
│ └── Localizable.xcstrings
├── ci_scripts
└── ci_post_clone.sh
└── trySwiftTokyo.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
├── IDEWorkspaceChecks.plist
└── swiftpm
└── Package.resolved
/.github/workflows/deploy_website.yml:
--------------------------------------------------------------------------------
1 | name: Deploy website to GitHub Pages
2 |
3 | on:
4 | push:
5 | branches:
6 | - "main"
7 | paths:
8 | - "Website/Sources/**"
9 | - "Website/Assets/**"
10 | - "trySwiftTokyo.xcworkspace/xcshareddata/swiftpm/Package.resolved"
11 | - ".github/workflows/deploy_website.yml"
12 | - "MyLibrary/Sources/SponsorFeature/Media.xcassets/**"
13 | - "MyLibrary/Sources/ScheduleFeature/Media.xcassets/**"
14 | - "MyLibrary/Sources/DataClient/Resources/**"
15 | workflow_dispatch:
16 |
17 | permissions:
18 | contents: read
19 | pages: write
20 | id-token: write
21 |
22 | concurrency:
23 | group: "pages"
24 | cancel-in-progress: false
25 |
26 | jobs:
27 | deploy:
28 | environment:
29 | name: github-pages
30 | url: ${{ steps.deployment.outputs.page_url }}
31 | runs-on: macos-15
32 | env:
33 | DEVELOPER_DIR: /Applications/Xcode.app
34 | steps:
35 | - name: Checkout
36 | uses: actions/checkout@v4
37 |
38 | - name: Cache SwiftPM dependencies
39 | uses: actions/cache@v4
40 | with:
41 | key: xcode-${{ runner.os }}-${{ hashFiles('Package.resolved') }}
42 | restore-keys: xcode-${{ runner.os }}-
43 | path: ~/DerivedData/SourcePackages
44 |
45 | - name: Skip Package Plugin Fingerprint Validatation
46 | run: defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
47 |
48 | - name: Skip Macro Fingerprint Validation
49 | run: defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES
50 |
51 | - name: Build Website scheme
52 | # https://forums.swift.org/t/xcode-and-swift-package-manager/44704/7
53 | run: |
54 | xcodebuild -scheme Website \
55 | -configuration Release \
56 | -sdk macosx \
57 | -destination 'platform=macOS' \
58 | -derivedDataPath ~/DerivedData
59 |
60 | - name: Run Website App
61 | run: ~/DerivedData/Build/Products/Release/Website
62 |
63 | - name: Setup Pages
64 | uses: actions/configure-pages@v5
65 |
66 | - name: Upload artifact
67 | uses: actions/upload-pages-artifact@v3
68 | with:
69 | path: './Website/Build'
70 |
71 | - name: Deploy to GitHub Pages
72 | id: deployment
73 | uses: actions/deploy-pages@v4
74 |
--------------------------------------------------------------------------------
/.github/workflows/format.yml:
--------------------------------------------------------------------------------
1 | name: Format
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | swift_format:
10 | name: swift-format
11 | runs-on: macOS-14
12 | steps:
13 | - uses: actions/checkout@v4
14 | - name: Xcode Select
15 | run: sudo xcode-select -s /Applications/Xcode_15.2.app
16 | - name: Install
17 | run: brew install swift-format
18 | - name: Format
19 | run: make format
20 | - uses: stefanzweifel/git-auto-commit-action@v5
21 | with:
22 | commit_message: "[ci skip] Run swift-format"
23 | branch: "main"
24 | env:
25 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## macOS
6 | .DS_Store
7 |
8 | ## User settings
9 | xcuserdata/
10 |
11 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
12 | *.xcscmblueprint
13 | *.xccheckout
14 |
15 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
16 | build/
17 | DerivedData/
18 | *.moved-aside
19 | *.pbxuser
20 | !default.pbxuser
21 | *.mode1v3
22 | !default.mode1v3
23 | *.mode2v3
24 | !default.mode2v3
25 | *.perspectivev3
26 | !default.perspectivev3
27 |
28 | ## Obj-C/Swift specific
29 | *.hmap
30 |
31 | ## App packaging
32 | *.ipa
33 | *.dSYM.zip
34 | *.dSYM
35 |
36 | ## Playgrounds
37 | timeline.xctimeline
38 | playground.xcworkspace
39 |
40 | # Swift Package Manager
41 | #
42 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
43 | # Packages/
44 | # Package.pins
45 | # Package.resolved
46 | # *.xcodeproj
47 | #
48 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
49 | # hence it is not needed unless you have added a package configuration file to your project
50 | # .swiftpm
51 |
52 | .build/
53 |
54 | # CocoaPods
55 | #
56 | # We recommend against adding the Pods directory to your .gitignore. However
57 | # you should judge for yourself, the pros and cons are mentioned at:
58 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
59 | #
60 | # Pods/
61 | #
62 | # Add this line if you want to avoid checking in source code from the Xcode workspace
63 | # *.xcworkspace
64 |
65 | # Carthage
66 | #
67 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
68 | # Carthage/Checkouts
69 |
70 | Carthage/Build/
71 |
72 | # Accio dependency management
73 | Dependencies/
74 | .accio/
75 |
76 | # fastlane
77 | #
78 | # It is recommended to not store the screenshots in the git repo.
79 | # Instead, use fastlane to re-generate the screenshots whenever they are needed.
80 | # For more information about the recommended setup visit:
81 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
82 |
83 | fastlane/report.xml
84 | fastlane/Preview.html
85 | fastlane/screenshots/**/*.png
86 | fastlane/test_output
87 |
88 | # Code Injection
89 | #
90 | # After new code Injection tools there's a generated folder /iOSInjectionProject
91 | # https://github.com/johnno1962/injectionforxcode
92 |
93 | iOSInjectionProject/
94 |
95 | # Website plugin
96 | Website/Assets/images/from_app/
97 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/App/App/App.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 | com.apple.developer.aps-environment
8 | development
9 | com.apple.developer.associated-domains
10 |
11 | appclips:tryswift.jp
12 |
13 | com.apple.developer.icloud-container-identifiers
14 |
15 | com.apple.developer.icloud-services
16 |
17 | com.apple.security.app-sandbox
18 |
19 | com.apple.security.files.user-selected.read-only
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/App/App/App.swift:
--------------------------------------------------------------------------------
1 | import AppFeature
2 | import SwiftUI
3 |
4 | @main
5 | struct ConferenceApp: App {
6 | var body: some Scene {
7 | WindowGroup {
8 | AppView(
9 | store: .init(initialState: .init()) {
10 | AppReducer()
11 | })
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/App/App/App.xctestplan:
--------------------------------------------------------------------------------
1 | {
2 | "configurations" : [
3 | {
4 | "id" : "235E58B3-6724-418C-907A-6211C4CC541B",
5 | "name" : "Test Scheme Action",
6 | "options" : {
7 |
8 | }
9 | }
10 | ],
11 | "defaultOptions" : {
12 | "codeCoverage" : false,
13 | "targetForVariableExpansion" : {
14 | "containerPath" : "container:App.xcodeproj",
15 | "identifier" : "D563615A2B931FF800E4F789",
16 | "name" : "App"
17 | }
18 | },
19 | "testTargets" : [
20 | {
21 | "target" : {
22 | "containerPath" : "container:..\/MyLibrary",
23 | "identifier" : "ScheduleFeatureTests",
24 | "name" : "ScheduleFeatureTests"
25 | }
26 | },
27 | {
28 | "target" : {
29 | "containerPath" : "container:..\/MyLibrary",
30 | "identifier" : "SponsorFeatureTests",
31 | "name" : "SponsorFeatureTests"
32 | }
33 | },
34 | {
35 | "target" : {
36 | "containerPath" : "container:..\/MyLibrary",
37 | "identifier" : "trySwiftFeatureTests",
38 | "name" : "trySwiftFeatureTests"
39 | }
40 | }
41 | ],
42 | "version" : 1
43 | }
44 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.420",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "app_icon.jpg",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | },
9 | {
10 | "idiom" : "mac",
11 | "scale" : "1x",
12 | "size" : "16x16"
13 | },
14 | {
15 | "idiom" : "mac",
16 | "scale" : "2x",
17 | "size" : "16x16"
18 | },
19 | {
20 | "idiom" : "mac",
21 | "scale" : "1x",
22 | "size" : "32x32"
23 | },
24 | {
25 | "idiom" : "mac",
26 | "scale" : "2x",
27 | "size" : "32x32"
28 | },
29 | {
30 | "idiom" : "mac",
31 | "scale" : "1x",
32 | "size" : "128x128"
33 | },
34 | {
35 | "idiom" : "mac",
36 | "scale" : "2x",
37 | "size" : "128x128"
38 | },
39 | {
40 | "idiom" : "mac",
41 | "scale" : "1x",
42 | "size" : "256x256"
43 | },
44 | {
45 | "idiom" : "mac",
46 | "scale" : "2x",
47 | "size" : "256x256"
48 | },
49 | {
50 | "idiom" : "mac",
51 | "scale" : "1x",
52 | "size" : "512x512"
53 | },
54 | {
55 | "filename" : "app_icon 1.jpg",
56 | "idiom" : "mac",
57 | "scale" : "2x",
58 | "size" : "512x512"
59 | }
60 | ],
61 | "info" : {
62 | "author" : "xcode",
63 | "version" : 1
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.appiconset/app_icon 1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/App/App/Assets.xcassets/AppIcon.appiconset/app_icon 1.jpg
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.appiconset/app_icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/App/App/Assets.xcassets/AppIcon.appiconset/app_icon.jpg
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "vision_back.png",
5 | "idiom" : "vision",
6 | "scale" : "2x"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/vision_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/App/App/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/vision_back.png
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "layers" : [
7 | {
8 | "filename" : "Front.solidimagestacklayer"
9 | },
10 | {
11 | "filename" : "Middle.solidimagestacklayer"
12 | },
13 | {
14 | "filename" : "Back.solidimagestacklayer"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "vision_front.png",
5 | "idiom" : "vision",
6 | "scale" : "2x"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/vision_front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/App/App/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/vision_front.png
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "vision_middle.png",
5 | "idiom" : "vision",
6 | "scale" : "2x"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/vision_middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/App/App/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/vision_middle.png
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/App/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/App/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleLocalizations
6 |
7 | en
8 | ja
9 |
10 | Live translation room number
11 | $(LIVE_TRANSLATION_KEY)
12 | UIBackgroundModes
13 |
14 | remote-notification
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/App/App/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/App/PrivacyInfo.xcprivacy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSPrivacyAccessedAPITypes
6 |
7 |
8 | NSPrivacyAccessedAPIType
9 | NSPrivacyAccessedAPICategoryUserDefaults
10 | NSPrivacyAccessedAPITypeReasons
11 |
12 | CA92.1
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/App/Clip/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.420",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/App/Clip/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "app_icon.jpg",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/App/Clip/Assets.xcassets/AppIcon.appiconset/app_icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/App/Clip/Assets.xcassets/AppIcon.appiconset/app_icon.jpg
--------------------------------------------------------------------------------
/App/Clip/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/App/Clip/Clip.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.associated-domains
6 |
7 | appclips:tryswift.jp
8 |
9 | com.apple.developer.parent-application-identifiers
10 |
11 | $(AppIdentifierPrefix)jp.tryswift.tokyo.App
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/App/Clip/ClipApp.swift:
--------------------------------------------------------------------------------
1 | import AppFeature
2 | import SwiftUI
3 |
4 | @main
5 | struct AppClipApp: App {
6 | var body: some Scene {
7 | WindowGroup {
8 | AppView(
9 | store: .init(initialState: .init()) {
10 | AppReducer()
11 | })
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/App/Clip/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ITSAppUsesNonExemptEncryption
6 |
7 | NSAppClip
8 |
9 | NSAppClipRequestEphemeralUserNotification
10 |
11 | NSAppClipRequestLocationConfirmation
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/App/Clip/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | tryswift.jp
2 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contribution Guidelines
2 |
3 | Thank you for considering contributing to this project! We appreciate your time and effort.
4 |
5 | To ensure a smooth collaboration, please follow these guidelines when contributing to the project:
6 |
7 | ## Table of Contents
8 |
9 | - [Getting Started](#getting-started)
10 | - [Submitting an Issue](#submitting-an-issue)
11 | - [Submitting a Pull Request](#submitting-a-pull-request)
12 | - [Code Style](#code-style)
13 | - [Documentation](#documentation)
14 | - [Testing](#testing)
15 | - [License](#license)
16 |
17 | ## Getting Started
18 |
19 | - Fork the repository and clone it locally.
20 | - Install the necessary dependencies.
21 | - Create a new branch for your changes.
22 |
23 | ## Submitting an Issue
24 |
25 | - Before submitting an issue, please check if it has already been reported.
26 | - Clearly describe the issue, including steps to reproduce if applicable.
27 | - Provide any relevant error messages or screenshots.
28 |
29 | ## Submitting a Pull Request
30 |
31 | - Fork the repository and clone it locally.
32 | - Create a new branch for your changes.
33 | - Make your changes and ensure they pass all tests.
34 | - Submit a pull request with a clear description of your changes.
35 |
36 | ## Code Style
37 |
38 | - Follow the established code style guidelines.
39 | - Use meaningful variable and function names.
40 | - Write clear and concise comments.
41 |
42 | ## Documentation
43 |
44 | - Document any new features or changes in the codebase.
45 | - Update the project's documentation as needed.
46 |
47 | ## Testing
48 |
49 | - Write tests for your code to ensure its correctness.
50 | - Run the existing test suite to make sure your changes don't break anything.
51 |
52 | ## License
53 |
54 | - By contributing to this project, you agree that your contributions will be licensed under the project's license.
55 |
56 | We appreciate your contributions and look forward to your pull requests!
57 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 try! Swift
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | format:
2 | @swift format \
3 | --ignore-unparsable-files \
4 | --in-place \
5 | --recursive \
6 | ./App/ \
7 | ./MyLibrary/
8 |
--------------------------------------------------------------------------------
/MyLibrary/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/AppFeature/AppView.swift:
--------------------------------------------------------------------------------
1 | import ComposableArchitecture
2 | import Foundation
3 | import GuidanceFeature
4 | import LiveTranslationFeature
5 | import ScheduleFeature
6 | import SponsorFeature
7 | import SwiftUI
8 | import TipKit
9 | import trySwiftFeature
10 |
11 | @Reducer
12 | public struct AppReducer {
13 | @ObservableState
14 | public struct State: Equatable {
15 | var schedule = Schedule.State()
16 | var guidance = Guidance.State()
17 | var sponsors = SponsorsList.State()
18 | var trySwift = TrySwift.State()
19 |
20 | public init() {
21 | try? Tips.configure([.displayFrequency(.immediate)])
22 | }
23 | }
24 |
25 | public enum Action {
26 | case schedule(Schedule.Action)
27 | case guidance(Guidance.Action)
28 | case sponsors(SponsorsList.Action)
29 | case trySwift(TrySwift.Action)
30 | }
31 |
32 | public init() {}
33 |
34 | public var body: some ReducerOf {
35 | Scope(state: \.schedule, action: \.schedule) {
36 | Schedule()
37 | }
38 | Scope(state: \.guidance, action: \.guidance) {
39 | Guidance()
40 | }
41 | Scope(state: \.sponsors, action: \.sponsors) {
42 | SponsorsList()
43 | }
44 | Scope(state: \.trySwift, action: \.trySwift) {
45 | TrySwift()
46 | }
47 | }
48 | }
49 |
50 | public struct AppView: View {
51 | var store: StoreOf
52 |
53 | public init(store: StoreOf) {
54 | self.store = store
55 | }
56 |
57 | public var body: some View {
58 | TabView {
59 | ScheduleView(store: store.scope(state: \.schedule, action: \.schedule))
60 | .tabItem {
61 | Label(String(localized: "Schedule", bundle: .module), systemImage: "calendar")
62 | }
63 | LiveTranslationView()
64 | .tabItem {
65 | Label(String(localized: "Translation", bundle: .module), systemImage: "text.bubble")
66 | }
67 | GuidanceView(store: store.scope(state: \.guidance, action: \.guidance))
68 | .tabItem {
69 | Label(String(localized: "Venue", bundle: .module), systemImage: "map")
70 | }
71 | SponsorsListView(store: store.scope(state: \.sponsors, action: \.sponsors))
72 | .tabItem {
73 | Label(String(localized: "Sponsors", bundle: .module), systemImage: "building.2")
74 | }
75 | TrySwiftView(store: store.scope(state: \.trySwift, action: \.trySwift))
76 | .tabItem {
77 | Image(.rikoTokyo)
78 | Text("About", bundle: .module)
79 | }
80 | }
81 | }
82 | }
83 |
84 | #Preview {
85 | AppView(
86 | store: .init(
87 | initialState: .init(),
88 | reducer: {
89 | AppReducer()
90 | }))
91 | }
92 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/AppFeature/Localizable.xcstrings:
--------------------------------------------------------------------------------
1 | {
2 | "sourceLanguage" : "en",
3 | "strings" : {
4 | "About" : {
5 | "localizations" : {
6 | "ja" : {
7 | "stringUnit" : {
8 | "state" : "translated",
9 | "value" : "try!Swift"
10 | }
11 | }
12 | }
13 | },
14 | "Schedule" : {
15 | "localizations" : {
16 | "ja" : {
17 | "stringUnit" : {
18 | "state" : "translated",
19 | "value" : "スケジュール"
20 | }
21 | }
22 | }
23 | },
24 | "Sponsors" : {
25 | "localizations" : {
26 | "ja" : {
27 | "stringUnit" : {
28 | "state" : "translated",
29 | "value" : "スポンサー"
30 | }
31 | }
32 | }
33 | },
34 | "Translation" : {
35 | "localizations" : {
36 | "ja" : {
37 | "stringUnit" : {
38 | "state" : "translated",
39 | "value" : "AI通訳"
40 | }
41 | }
42 | }
43 | },
44 | "Venue" : {
45 | "localizations" : {
46 | "ja" : {
47 | "stringUnit" : {
48 | "state" : "translated",
49 | "value" : "会場"
50 | }
51 | }
52 | }
53 | }
54 | },
55 | "version" : "1.0"
56 | }
--------------------------------------------------------------------------------
/MyLibrary/Sources/AppFeature/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/AppFeature/Media.xcassets/rikoTokyo.symbolset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "symbols" : [
7 | {
8 | "filename" : "RikoTokyo.svg",
9 | "idiom" : "universal"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/DataClient/Client.swift:
--------------------------------------------------------------------------------
1 | import Dependencies
2 | import DependenciesMacros
3 | import Foundation
4 | import SharedModels
5 |
6 | @DependencyClient
7 | public struct DataClient {
8 | public var fetchDay1: @Sendable () throws -> Conference
9 | public var fetchDay2: @Sendable () throws -> Conference
10 | public var fetchDay3: @Sendable () throws -> Conference
11 | public var fetchSponsors: @Sendable () throws -> Sponsors
12 | public var fetchOrganizers: @Sendable () throws -> [Organizer]
13 | public var fetchSpeakers: @Sendable () throws -> [Speaker]
14 | }
15 |
16 | extension DataClient: DependencyKey {
17 |
18 | static public var liveValue: DataClient = .init(
19 | fetchDay1: {
20 | let data = loadDataFromBundle(fileName: "2025-day1")
21 | let response = try jsonDecoder.decode(Conference.self, from: data)
22 | return response
23 | },
24 | fetchDay2: {
25 | let data = loadDataFromBundle(fileName: "2025-day2")
26 | let response = try jsonDecoder.decode(Conference.self, from: data)
27 | return response
28 | },
29 | fetchDay3: {
30 | let data = loadDataFromBundle(fileName: "2025-day3")
31 | let response = try jsonDecoder.decode(Conference.self, from: data)
32 | return response
33 | },
34 | fetchSponsors: {
35 | let data = loadDataFromBundle(fileName: "sponsors")
36 | let response = try jsonDecoder.decode(Sponsors.self, from: data)
37 | return response
38 | },
39 | fetchOrganizers: {
40 | let data = loadDataFromBundle(fileName: "organizers")
41 | let response = try jsonDecoder.decode([Organizer].self, from: data)
42 | return response
43 | },
44 | fetchSpeakers: {
45 | let data = loadDataFromBundle(fileName: "speakers")
46 | let response = try jsonDecoder.decode([Speaker].self, from: data)
47 | return response
48 | }
49 | )
50 |
51 | static func loadDataFromBundle(fileName: String) -> Data {
52 |
53 | let filePath = Bundle.module.path(forResource: fileName, ofType: "json")!
54 | let fileURL = URL(fileURLWithPath: filePath)
55 | let data = try! Data(contentsOf: fileURL)
56 | return data
57 | }
58 | }
59 |
60 | let jsonDecoder = {
61 | $0.dateDecodingStrategy = .iso8601
62 | $0.keyDecodingStrategy = .convertFromSnakeCase
63 | return $0
64 | }(JSONDecoder())
65 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/DependencyExtra/Safari.swift:
--------------------------------------------------------------------------------
1 | import Dependencies
2 |
3 | #if canImport(SafariServices) && canImport(SwiftUI)
4 | import SafariServices
5 | import SwiftUI
6 |
7 | extension DependencyValues {
8 | /// A dependency that opens a URL in SFSafariViewController.
9 | ///
10 | /// In iOS, use SFSafariViewController in UIKit context. Otherwise use openURL in environment values
11 | ///
12 | /// - SeeAlso: https://sarunw.com/posts/sfsafariviewcontroller-in-swiftui/
13 | @available(iOS 15, macOS 11, tvOS 14, watchOS 7, *)
14 | public var safari: SafariEffect {
15 | get { self[SafariKey.self] }
16 | set { self[SafariKey.self] = newValue }
17 | }
18 | }
19 |
20 | @available(iOS 15, macOS 11, tvOS 14, watchOS 7, *)
21 | private enum SafariKey: DependencyKey {
22 | static let liveValue = SafariEffect { url in
23 | let stream = AsyncStream { continuation in
24 | let task = Task { @MainActor in
25 | #if os(iOS)
26 | let vc = SFSafariViewController(url: url)
27 | UIApplication.shared.firstKeyWindow?.rootViewController?.present(vc, animated: true)
28 | continuation.yield(true)
29 | continuation.finish()
30 | #else
31 | EnvironmentValues().openURL(url)
32 | continuation.yield(true)
33 | continuation.finish()
34 | #endif
35 | }
36 | continuation.onTermination = { @Sendable _ in
37 | task.cancel()
38 | }
39 | }
40 | return await stream.first(where: { _ in true }) ?? false
41 | }
42 | static let testValue = SafariEffect { _ in
43 | XCTFail(#"Unimplemented: @Dependency(\.safari)"#)
44 | return false
45 | }
46 | }
47 |
48 | public struct SafariEffect: Sendable {
49 | private let handler: @Sendable (URL) async -> Bool
50 |
51 | public init(handler: @escaping @Sendable (URL) async -> Bool) {
52 | self.handler = handler
53 | }
54 |
55 | @available(watchOS, unavailable)
56 | @discardableResult
57 | public func callAsFunction(_ url: URL) async -> Bool {
58 | await self.handler(url)
59 | }
60 |
61 | @_disfavoredOverload
62 | public func callAsFunction(_ url: URL) async {
63 | _ = await self.handler(url)
64 | }
65 | }
66 |
67 | #endif
68 |
69 | #if canImport(UIKit)
70 | import UIKit
71 |
72 | extension UIApplication {
73 | @available(iOS 15.0, *)
74 | var firstKeyWindow: UIWindow? {
75 | return UIApplication.shared.connectedScenes
76 | .compactMap { $0 as? UIWindowScene }
77 | .filter { $0.activationState == .foregroundActive }
78 | .first?.keyWindow
79 | }
80 | }
81 |
82 | #endif
83 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Lines.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import IdentifiedCollections
3 | import MapKit
4 | import SwiftUI
5 |
6 | enum Lines: Equatable, Identifiable, CaseIterable {
7 | var id: Self { self }
8 |
9 | case tachikawa
10 | case haneda
11 | case tokyo
12 |
13 | var localizedKey: LocalizedStringKey {
14 | switch self {
15 | case .tachikawa:
16 | return "Tachikawa St."
17 | case .haneda:
18 | return "Haneda Airport"
19 | case .tokyo:
20 | return "Tokyo St."
21 | }
22 | }
23 |
24 | var region: MKCoordinateRegion {
25 | switch self {
26 | case .tachikawa:
27 | return .init(
28 | center: .init(latitude: 35.657892, longitude: 139.703748),
29 | span: .init(latitudeDelta: 0.01, longitudeDelta: 0.01))
30 | case .haneda:
31 | return .init(
32 | center: .init(latitude: 35.658575, longitude: 139.701499),
33 | span: .init(latitudeDelta: 0.01, longitudeDelta: 0.01))
34 | case .tokyo:
35 | return .init(
36 | center: .init(latitude: 35.665222, longitude: 139.712543),
37 | span: .init(latitudeDelta: 0.01, longitudeDelta: 0.01))
38 | }
39 | }
40 |
41 | var searchQuery: String {
42 | switch self {
43 | case .tachikawa:
44 | return "JR 立川駅"
45 | case .haneda:
46 | return "羽田空港"
47 | case .tokyo:
48 | return "東京駅"
49 | }
50 | }
51 |
52 | var exitName: LocalizedStringKey {
53 | switch self {
54 | case .tachikawa:
55 | return "North Exit"
56 | case .haneda:
57 | return "Arrival Erea"
58 | case .tokyo:
59 | return "Chuo line"
60 | }
61 | }
62 |
63 | var originTitle: LocalizedStringKey {
64 | switch self {
65 | case .tachikawa:
66 | return "Tachikawa Station"
67 | case .haneda:
68 | return "Haneda Airport"
69 | case .tokyo:
70 | return "Tokyo Station"
71 | }
72 | }
73 |
74 | var itemColor: Color {
75 | switch self {
76 | case .tachikawa:
77 | return Color.red
78 | case .haneda:
79 | return Color.green
80 | case .tokyo:
81 | return Color.purple
82 | }
83 | }
84 |
85 | var directions: IdentifiedArrayOf {
86 | switch self {
87 | case .tachikawa:
88 | return [
89 | .init(order: 1, description: "tachikawa-1")
90 | ]
91 | case .haneda:
92 | return [
93 | .init(order: 1, description: "haneda-1")
94 | ]
95 | case .tokyo:
96 | return [
97 | .init(order: 1, description: "tokyo-1")
98 | ]
99 | }
100 | }
101 |
102 | var duration: Duration {
103 | switch self {
104 | case .tachikawa:
105 | return .seconds(11 * 60)
106 | case .haneda:
107 | return .seconds(140 * 60)
108 | case .tokyo:
109 | return .seconds(42 * 60)
110 | }
111 | }
112 |
113 | struct Direction: Equatable, Identifiable {
114 | var id: UUID { .init() }
115 | var order: Int
116 | var description: LocalizedStringKey
117 | var imageName: String?
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-1.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-1.imageset/jr-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-1.imageset/jr-1.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-10.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-10.imageset/jr-10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-10.imageset/jr-10.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-11.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-11.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-11.imageset/jr-11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-11.imageset/jr-11.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-2.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-2.imageset/jr-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-2.imageset/jr-2.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-3.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-3.imageset/jr-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-3.imageset/jr-3.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-4.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-4.imageset/jr-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-4.imageset/jr-4.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-5.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-5.imageset/jr-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-5.imageset/jr-5.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-6.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-6.imageset/jr-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-6.imageset/jr-6.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-7.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-7.imageset/jr-7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-7.imageset/jr-7.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-8.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-8.imageset/jr-8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-8.imageset/jr-8.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "jr-9.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-9.imageset/jr-9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/jr-9.imageset/jr-9.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/metro-1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "metro-1.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Media.xcassets/metro-1.imageset/metro-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/GuidanceFeature/Media.xcassets/metro-1.imageset/metro-1.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/GuidanceFeature/Util.swift:
--------------------------------------------------------------------------------
1 | import CoreLocation
2 | import Foundation
3 | import MapKit
4 |
5 | extension MKPolyline {
6 | var coords: [CLLocationCoordinate2D] {
7 | var coords = [CLLocationCoordinate2D](
8 | repeating: kCLLocationCoordinate2DInvalid,
9 | count: pointCount
10 | )
11 | getCoordinates(&coords, range: NSRange(location: 0, length: pointCount))
12 | return coords
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/LiveTranslationFeature/Localizable.xcstrings:
--------------------------------------------------------------------------------
1 | {
2 | "sourceLanguage" : "en",
3 | "strings" : {
4 | "Live translation" : {
5 | "localizations" : {
6 | "ja" : {
7 | "stringUnit" : {
8 | "state" : "translated",
9 | "value" : "リアルタイム通訳"
10 | }
11 | }
12 | }
13 | },
14 | "Not started yet" : {
15 | "localizations" : {
16 | "ja" : {
17 | "stringUnit" : {
18 | "state" : "translated",
19 | "value" : "通訳はまだ開始していません"
20 | }
21 | }
22 | }
23 | },
24 | "Powered by" : {
25 | "localizations" : {
26 | "ja" : {
27 | "stringUnit" : {
28 | "state" : "translated",
29 | "value" : "Powered by"
30 | }
31 | }
32 | }
33 | },
34 | "Room is unavailable" : {
35 |
36 | }
37 | },
38 | "version" : "1.0"
39 | }
--------------------------------------------------------------------------------
/MyLibrary/Sources/LiveTranslationFeature/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/LiveTranslationFeature/Media.xcassets/Flitto.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Flitto_W.png",
5 | "idiom" : "universal"
6 | },
7 | {
8 | "appearances" : [
9 | {
10 | "appearance" : "luminosity",
11 | "value" : "dark"
12 | }
13 | ],
14 | "filename" : "Flitto_D.png",
15 | "idiom" : "universal"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | },
22 | "properties" : {
23 | "preserves-vector-representation" : true
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/LiveTranslationFeature/Media.xcassets/Flitto.imageset/Flitto_D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/LiveTranslationFeature/Media.xcassets/Flitto.imageset/Flitto_D.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/LiveTranslationFeature/Media.xcassets/Flitto.imageset/Flitto_W.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/LiveTranslationFeature/Media.xcassets/Flitto.imageset/Flitto_W.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/LiveTranslationFeature/SelectLanguageSheet.swift:
--------------------------------------------------------------------------------
1 | import LiveTranslationSDK_iOS
2 | import SwiftUI
3 |
4 | struct SelectLanguageSheet: View {
5 | let languageList: [LanguageEntity.Response.LanguageItem]
6 | let langSet: LanguageEntity.Response.LangSet?
7 | let selectedLanguageAction: (String) -> Void
8 |
9 | @State var languageListWithTitle: [LanguageWithTitle] = []
10 |
11 | var body: some View {
12 | ScrollView {
13 | LazyVStack {
14 | ForEach(languageListWithTitle) { lang in
15 | Button(action: { selectedLanguageAction(lang.langCode) }) {
16 | Text(lang.langTitle)
17 | .frame(maxWidth: .infinity, alignment: .leading)
18 | .padding()
19 | .contentShape(.rect)
20 | }
21 | }
22 | }
23 | }
24 | .task {
25 | self.languageListWithTitle = await makeLanguageWithTitleList()
26 | }
27 | }
28 | }
29 |
30 | extension SelectLanguageSheet {
31 | fileprivate func makeLanguageWithTitleList() async -> [LanguageWithTitle] {
32 | await withCheckedContinuation { continuation in
33 | let newList: [LanguageWithTitle] = languageList.reduce([]) { current, next in
34 | guard let title = langSet?.langCodingKey(next.langCode) else { return current }
35 | return current + [.init(langCode: next.langCode, langTitle: title)]
36 | }
37 |
38 | continuation.resume(returning: newList)
39 | }
40 | }
41 | }
42 |
43 | extension SelectLanguageSheet {
44 | struct LanguageWithTitle: Equatable, Identifiable {
45 | var id: String { langCode }
46 | let langCode: String
47 | let langTitle: String
48 |
49 | init(langCode: String, langTitle: String) {
50 | self.langCode = langCode
51 | self.langTitle = langTitle
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/MapKitClient/Client.swift:
--------------------------------------------------------------------------------
1 | import CoreLocation
2 | import Dependencies
3 | import DependenciesMacros
4 | import Foundation
5 | import MapKit
6 | import SharedModels
7 |
8 | @DependencyClient
9 | public struct MapKitClient {
10 | public var mapRoute: @Sendable (MKMapItem, MKMapItem) async throws -> MKRoute?
11 | public var lookAround: @Sendable (MKMapItem) async throws -> MKLookAroundScene?
12 | public var reverseGeocodeLocation:
13 | @Sendable (CLLocationCoordinate2D) async throws -> [MKPlacemark]
14 | public var localSearch: @Sendable (String, MKCoordinateRegion) async throws -> [MKMapItem]
15 | }
16 |
17 | extension MapKitClient: DependencyKey {
18 | public static var liveValue: Self = .init(
19 | mapRoute: { starting, ending in
20 | let directionsRequest = MKDirections.Request()
21 | directionsRequest.source = starting
22 | directionsRequest.destination = ending
23 | directionsRequest.transportType = [.transit, .walking]
24 |
25 | let directionsService = MKDirections(request: directionsRequest)
26 | let response = try await directionsService.calculate()
27 | let route = response.routes.first
28 | return route
29 | },
30 | lookAround: { mapItem in
31 | let sceneRequest = MKLookAroundSceneRequest(mapItem: mapItem)
32 | return try await sceneRequest.scene
33 | },
34 | reverseGeocodeLocation: { location in
35 | let geoCoder = CLGeocoder()
36 | return try await geoCoder.reverseGeocodeLocation(
37 | .init(latitude: location.latitude, longitude: location.longitude)
38 | )
39 | .map(MKPlacemark.init(placemark:))
40 | },
41 | localSearch: { naturalLanguageQuery, region in
42 | let request = MKLocalSearch.Request()
43 | request.region = region
44 | request.naturalLanguageQuery = naturalLanguageQuery
45 | request.resultTypes = .pointOfInterest
46 | return try await MKLocalSearch(request: request).start().mapItems
47 | }
48 | )
49 | }
50 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Akimu Hirai.imageset/Akimu Hirai.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Akimu Hirai.imageset/Akimu Hirai.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Akimu Hirai.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Akimu Hirai.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Audrey.imageset/Audrey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Audrey.imageset/Audrey.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Audrey.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Audrey.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Brandon Williams.imageset/Brandon Williams.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Brandon Williams.imageset/Brandon Williams.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Brandon Williams.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Brandon Williams.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Chris Vasselli.imageset/Chris Vasselli.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Chris Vasselli.imageset/Chris Vasselli.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Chris Vasselli.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Chris Vasselli.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Emad.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Emad.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Emad.imageset/Emad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Emad.imageset/Emad.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Hiromu Tsuruta.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Hiromu Tsuruta.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Hiromu Tsuruta.imageset/Hiromu Tsuruta.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Hiromu Tsuruta.imageset/Hiromu Tsuruta.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Hisaki Sato.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Hisaki Sato.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Hisaki Sato.imageset/Hisaki Sato.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Hisaki Sato.imageset/Hisaki Sato.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Josh Holtz.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Josh Holtz.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Josh Holtz.imageset/Josh Holtz.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Josh Holtz.imageset/Josh Holtz.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Kazuhiro Kamakura.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Kazuhiro Kamakura.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Kazuhiro Kamakura.imageset/Kazuhiro Kamakura.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Kazuhiro Kamakura.imageset/Kazuhiro Kamakura.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Kazuya Hiruma.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Kazuya Hiruma.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Kazuya Hiruma.imageset/Kazuya Hiruma.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Kazuya Hiruma.imageset/Kazuya Hiruma.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Lil Ossa.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Lil Ossa.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Lil Ossa.imageset/Lil Ossa.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Lil Ossa.imageset/Lil Ossa.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Marcin Kryzyzanowski.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Marcin Kryzyzanowski.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Marcin Kryzyzanowski.imageset/Marcin Kryzyzanowski.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Marcin Kryzyzanowski.imageset/Marcin Kryzyzanowski.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/SHIMOTORI Shigure.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "SHIMOTORI Shigure.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/SHIMOTORI Shigure.imageset/SHIMOTORI Shigure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/SHIMOTORI Shigure.imageset/SHIMOTORI Shigure.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Saleem Abdulrasool.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Saleem Abdulrasool.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Saleem Abdulrasool.imageset/Saleem Abdulrasool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Saleem Abdulrasool.imageset/Saleem Abdulrasool.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Shinichiro Oba.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Shinichiro Oba.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Shinichiro Oba.imageset/Shinichiro Oba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Shinichiro Oba.imageset/Shinichiro Oba.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Shogo Yoshida.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Shogo Yoshida.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Shogo Yoshida.imageset/Shogo Yoshida.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Shogo Yoshida.imageset/Shogo Yoshida.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Stephen Celis.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Stephen Celis.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Stephen Celis.imageset/Stephen Celis.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Stephen Celis.imageset/Stephen Celis.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Tim Condon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Tim Condon.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Tim Condon.imageset/Tim Condon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Tim Condon.imageset/Tim Condon.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Xingyu Wang.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Xingyu Wang.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Xingyu Wang.imageset/Xingyu Wang.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Xingyu Wang.imageset/Xingyu Wang.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Yunosuke Sakai.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Yunosuke Sakai.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Yunosuke Sakai.imageset/Yunosuke Sakai.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Yunosuke Sakai.imageset/Yunosuke Sakai.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Yusuke Kita.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Yusuke Kita.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Yusuke Kita.imageset/Yusuke Kita.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Yusuke Kita.imageset/Yusuke Kita.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Zamzam.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "Zamzam.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Zamzam.imageset/Zamzam.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/Zamzam.imageset/Zamzam.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/akihiko_sato.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "akihiko_sato.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/akihiko_sato.imageset/akihiko_sato.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/akihiko_sato.imageset/akihiko_sato.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/andrew_zheng.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "andrew_zheng.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/andrew_zheng.imageset/andrew_zheng.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/andrew_zheng.imageset/andrew_zheng.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/benjamin_sandofsky.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "benjamin_sandofsky.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/benjamin_sandofsky.imageset/benjamin_sandofsky.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/benjamin_sandofsky.imageset/benjamin_sandofsky.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/fromkk.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "fromkk.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/fromkk.imageset/fromkk.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/fromkk.imageset/fromkk.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/giginet.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "giginet.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/giginet.imageset/giginet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/giginet.imageset/giginet.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/gui_rambo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "gui_rambo.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/gui_rambo.imageset/gui_rambo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/gui_rambo.imageset/gui_rambo.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/halordain.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "halordain.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/halordain.imageset/halordain.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/halordain.imageset/halordain.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ikesyo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "ikesyo.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ikesyo.imageset/ikesyo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ikesyo.imageset/ikesyo.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/jeffrey_bergier.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "jeffrey_bergier.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/jeffrey_bergier.imageset/jeffrey_bergier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/jeffrey_bergier.imageset/jeffrey_bergier.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/katei.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "katei.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/katei.imageset/katei.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/katei.imageset/katei.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/kishikawa_katsumi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "kishikawa_katsumi.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/kishikawa_katsumi.imageset/kishikawa_katsumi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/kishikawa_katsumi.imageset/kishikawa_katsumi.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/konrad_ktoso_malawski.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "konrad_ktoso_malawski.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/konrad_ktoso_malawski.imageset/konrad_ktoso_malawski.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/konrad_ktoso_malawski.imageset/konrad_ktoso_malawski.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/kosala_jayasekara.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "kosala_jayasekara.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/kosala_jayasekara.imageset/kosala_jayasekara.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/kosala_jayasekara.imageset/kosala_jayasekara.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/krzysztof_zablocki.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "krzysztof_zablocki.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/krzysztof_zablocki.imageset/krzysztof_zablocki.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/krzysztof_zablocki.imageset/krzysztof_zablocki.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/michael_petrie.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "michael_petrie.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/michael_petrie.imageset/michael_petrie.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/michael_petrie.imageset/michael_petrie.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/mikaela_caron.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "mikaela_caron.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/mikaela_caron.imageset/mikaela_caron.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/mikaela_caron.imageset/mikaela_caron.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/natasha.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "natasha.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/natasha.imageset/natasha.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/natasha.imageset/natasha.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/nick_lockwood.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "nick_lockwood.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/nick_lockwood.imageset/nick_lockwood.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/nick_lockwood.imageset/nick_lockwood.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/noah_martin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "noah_martin.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/noah_martin.imageset/noah_martin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/noah_martin.imageset/noah_martin.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/noppe.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "noppe.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/noppe.imageset/noppe.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/noppe.imageset/noppe.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ojun.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "ojun.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ojun.imageset/ojun.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ojun.imageset/ojun.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/omochimetaru.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "omochimetaru.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/omochimetaru.imageset/omochimetaru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/omochimetaru.imageset/omochimetaru.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/paul_hudson.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "paul_hudson.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/paul_hudson.imageset/paul_hudson.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/paul_hudson.imageset/paul_hudson.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/pradnya_nikam.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "pradnya_nikam.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/pradnya_nikam.imageset/pradnya_nikam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/pradnya_nikam.imageset/pradnya_nikam.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/rockname.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "rockname.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/rockname.imageset/rockname.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/rockname.imageset/rockname.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryo_igarashi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "ryo_igarashi.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryo_igarashi.imageset/ryo_igarashi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryo_igarashi.imageset/ryo_igarashi.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryo_yamashita.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "ryo_yamashita.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryo_yamashita.imageset/ryo_yamashita.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryo_yamashita.imageset/ryo_yamashita.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryota_motonishi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "ryota_motonishi.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryota_motonishi.imageset/ryota_motonishi.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/ryota_motonishi.imageset/ryota_motonishi.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/satoshi_hattori.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "satoshi_hattori.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/satoshi_hattori.imageset/satoshi_hattori.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/satoshi_hattori.imageset/satoshi_hattori.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sebastiaan_de_with.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "sebastiaan_de_with.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sebastiaan_de_with.imageset/sebastiaan_de_with.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sebastiaan_de_with.imageset/sebastiaan_de_with.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/si_beaumont.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "si_beaumont.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/si_beaumont.imageset/si_beaumont.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/si_beaumont.imageset/si_beaumont.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sophie_hudson.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "sophie_hudson.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sophie_hudson.imageset/sophie_hudson.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sophie_hudson.imageset/sophie_hudson.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sugiy.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "sugiy.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sugiy.imageset/sugiy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/sugiy.imageset/sugiy.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/tochi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "tochi.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/tochi.imageset/tochi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/tochi.imageset/tochi.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/tokyo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "app_icon.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/tokyo.imageset/app_icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/tokyo.imageset/app_icon.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/usagimaru.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "usagimaru.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/usagimaru.imageset/usagimaru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/usagimaru.imageset/usagimaru.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/vincent_pradeilles.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "vincent_pradeilles.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/vincent_pradeilles.imageset/vincent_pradeilles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/vincent_pradeilles.imageset/vincent_pradeilles.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yamaken.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "yamaken.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yamaken.imageset/yamaken.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yamaken.imageset/yamaken.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yj_cheng.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "yj_cheng.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yj_cheng.imageset/yj_cheng.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yj_cheng.imageset/yj_cheng.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yoshimasa_niwa.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "yoshimasa_niwa.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yoshimasa_niwa.imageset/yoshimasa_niwa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/ScheduleFeature/Media.xcassets/yoshimasa_niwa.imageset/yoshimasa_niwa.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SharedModels/Conference.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public struct Conference: Codable, Equatable, Hashable, Sendable {
4 | public var title: String
5 | public var date: Date
6 | public var schedules: [Schedule]
7 |
8 | public init(id: Int, title: String, date: Date, schedules: [Schedule]) {
9 | self.title = title
10 | self.date = date
11 | self.schedules = schedules
12 | }
13 | }
14 |
15 | public struct Schedule: Codable, Equatable, Hashable, Sendable {
16 | public var time: Date
17 | public var sessions: [Session]
18 |
19 | public init(time: Date, sessions: [Session]) {
20 | self.time = time
21 | self.sessions = sessions
22 | }
23 | }
24 |
25 | public struct Session: Codable, Equatable, Hashable, Sendable {
26 | public var title: String
27 | public var summary: String?
28 | public var speakers: [Speaker]?
29 | public var place: String?
30 | public var description: String?
31 | public var requirements: String?
32 |
33 | public init(
34 | title: String, speakers: [Speaker]?, place: String?, description: String?,
35 | requirements: String?
36 | ) {
37 | self.title = title
38 | self.speakers = speakers
39 | self.place = place
40 | self.description = description
41 | self.requirements = requirements
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SharedModels/Organizer.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public struct Organizer: Codable, Equatable, Hashable, Sendable, Identifiable {
4 | public var id: Int
5 | public var name: String
6 | public var imageName: String
7 | public var bio: String
8 | public var links: [Link]?
9 |
10 | public struct Link: Codable, Equatable, Hashable, Sendable {
11 | public var name: String
12 | public var url: URL
13 |
14 | public init(name: String, url: URL) {
15 | self.name = name
16 | self.url = url
17 | }
18 | }
19 |
20 | public init(id: Int, name: String, imageName: String, bio: String, links: [Link]? = nil) {
21 | self.id = id
22 | self.name = name
23 | self.imageName = imageName
24 | self.bio = bio
25 | self.links = links
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SharedModels/Speaker.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public struct Speaker: Codable, Equatable, Hashable, Sendable {
4 | public var name: String
5 | public var imageName: String
6 | public var bio: String?
7 | public var links: [Link]?
8 | public var jobTitle: String?
9 |
10 | public struct Link: Codable, Equatable, Hashable, Sendable {
11 | public var name: String
12 | public var url: URL
13 |
14 | public init(name: String, url: URL) {
15 | self.name = name
16 | self.url = url
17 | }
18 | }
19 |
20 | public init(name: String, imageName: String, bio: String, links: [Link]) {
21 | self.name = name
22 | self.imageName = imageName
23 | self.bio = bio
24 | self.links = links
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SharedModels/Sponsors.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public enum Plan: String, Codable, Sendable, CaseIterable {
4 | case platinum
5 | case gold
6 | case silver
7 | case bronze
8 | case diversityAndInclusion = "Diversity and Inclusion"
9 | case student
10 | case community
11 | case individual
12 | }
13 |
14 | public struct Sponsors: Codable, Equatable, Hashable, Sendable {
15 | let platinum: [Sponsor]
16 | let gold: [Sponsor]
17 | let silver: [Sponsor]
18 | let bronze: [Sponsor]
19 | let diversity: [Sponsor]
20 | let student: [Sponsor]
21 | let community: [Sponsor]
22 | let individual: [Sponsor]
23 |
24 | public var allPlans: [Plan: [Sponsor]] {
25 | return [
26 | .platinum: platinum,
27 | .gold: gold,
28 | .silver: silver,
29 | .bronze: bronze,
30 | .diversityAndInclusion: diversity,
31 | .student: student,
32 | .community: community,
33 | .individual: individual,
34 | ]
35 | }
36 |
37 | public init(
38 | platinum: [Sponsor], gold: [Sponsor], silver: [Sponsor], bronze: [Sponsor],
39 | diversity: [Sponsor], student: [Sponsor], community: [Sponsor], individual: [Sponsor]
40 | ) {
41 | self.platinum = platinum
42 | self.gold = gold
43 | self.silver = silver
44 | self.bronze = bronze
45 | self.diversity = diversity
46 | self.student = student
47 | self.community = community
48 | self.individual = individual
49 | }
50 | }
51 |
52 | public struct Sponsor: Codable, Equatable, Hashable, Identifiable, Sendable {
53 | public var id: Int
54 | public var name: String?
55 | public var imageName: String
56 | public var link: URL?
57 | public var japaneseLink: URL?
58 |
59 | public init(id: Int, name: String, imageName: String, link: URL? = nil) {
60 | self.id = id
61 | self.name = name
62 | self.imageName = imageName
63 | self.link = link
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Localizable.xcstrings:
--------------------------------------------------------------------------------
1 | {
2 | "sourceLanguage" : "en",
3 | "strings" : {
4 | "Sponsors" : {
5 | "localizations" : {
6 | "ja" : {
7 | "stringUnit" : {
8 | "state" : "translated",
9 | "value" : "スポンサー"
10 | }
11 | }
12 | }
13 | }
14 | },
15 | "version" : "1.0"
16 | }
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_Luup.imageset/BRONZE_Luup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_Luup.imageset/BRONZE_Luup.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_Luup.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BRONZE_Luup.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_cybozu.imageset/BRONZE_cybozu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_cybozu.imageset/BRONZE_cybozu.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_cybozu.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BRONZE_cybozu.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_mirrativ.imageset/BRONZE_mirrativ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_mirrativ.imageset/BRONZE_mirrativ.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_mirrativ.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BRONZE_mirrativ.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_pixiv.imageset/BRONZE_pixiv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_pixiv.imageset/BRONZE_pixiv.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_pixiv.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BRONZE_pixiv.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_smartbank.imageset/BRONZE_smartbank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_smartbank.imageset/BRONZE_smartbank.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_smartbank.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BRONZE_smartbank.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_zozo.imageset/BRONZE_zozo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_zozo.imageset/BRONZE_zozo.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/BRONZE_zozo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BRONZE_zozo.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_DroidKaigi.imageset/COMMUNITY_DroidKaigi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_DroidKaigi.imageset/COMMUNITY_DroidKaigi.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_DroidKaigi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "COMMUNITY_DroidKaigi.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Emerge-Tools.imageset/COMMUNITY_Emerge-Tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Emerge-Tools.imageset/COMMUNITY_Emerge-Tools.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Emerge-Tools.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "COMMUNITY_Emerge-Tools.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Flitto.imageset/COMMUNITY_Flitto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Flitto.imageset/COMMUNITY_Flitto.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Flitto.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "COMMUNITY_Flitto.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Scivone.imageset/COMMUNITY_Scivone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Scivone.imageset/COMMUNITY_Scivone.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/COMMUNITY_Scivone.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "COMMUNITY_Scivone.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_CyberAgent.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_CyberAgent.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_CyberAgent.imageset/GOLD_CyberAgent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_CyberAgent.imageset/GOLD_CyberAgent.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_DMM.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_DMM.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_DMM.imageset/GOLD_DMM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_DMM.imageset/GOLD_DMM.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_DeNA.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_DeNA.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_DeNA.imageset/GOLD_DeNA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_DeNA.imageset/GOLD_DeNA.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_LINEヤフー.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_LINEヤフー.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_LINEヤフー.imageset/GOLD_LINEヤフー.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_LINEヤフー.imageset/GOLD_LINEヤフー.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_MIXI.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_MIXI.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_MIXI.imageset/GOLD_MIXI.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_MIXI.imageset/GOLD_MIXI.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_MagicPod.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_MagicPod.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_MagicPod.imageset/GOLD_MagicPod.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_MagicPod.imageset/GOLD_MagicPod.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_ORD.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_ORD.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_ORD.imageset/GOLD_ORD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_ORD.imageset/GOLD_ORD.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_TVer.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_TVer.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_TVer.imageset/GOLD_TVer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_TVer.imageset/GOLD_TVer.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_Tramline.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_Tramline.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_Tramline.imageset/GOLD_Tramline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_Tramline.imageset/GOLD_Tramline.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_kinto-technologies.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_kinto-technologies.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_kinto-technologies.imageset/GOLD_kinto-technologies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_kinto-technologies.imageset/GOLD_kinto-technologies.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_u-next.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "GOLD_u-next.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_u-next.imageset/GOLD_u-next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/GOLD_u-next.imageset/GOLD_u-next.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/PLATINUM_RevenueCat.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "PLATINUM_RevenueCat.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/PLATINUM_RevenueCat.imageset/PLATINUM_RevenueCat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/PLATINUM_RevenueCat.imageset/PLATINUM_RevenueCat.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_ moneyforward.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "SILVER_ moneyforward.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_ moneyforward.imageset/SILVER_ moneyforward.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_ moneyforward.imageset/SILVER_ moneyforward.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_hatena.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "SILVER_hatena.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_hatena.imageset/SILVER_hatena.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_hatena.imageset/SILVER_hatena.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_medley.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "SILVER_medley.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_medley.imageset/SILVER_medley.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_medley.imageset/SILVER_medley.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_mercari.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "SILVER_mercari.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_mercari.imageset/SILVER_mercari.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_mercari.imageset/SILVER_mercari.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_newmo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "SILVER_newmo.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_newmo.imageset/SILVER_newmo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_newmo.imageset/SILVER_newmo.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_nomura.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "SILVER_nomura.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_nomura.imageset/SILVER_nomura.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/SILVER_nomura.imageset/SILVER_nomura.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/STUDENT_SCHOLARSHIP_kishikawakatsumi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "STUDENT_SCHOLARSHIP_kishikawakatsumi.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/STUDENT_SCHOLARSHIP_kishikawakatsumi.imageset/STUDENT_SCHOLARSHIP_kishikawakatsumi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/STUDENT_SCHOLARSHIP_kishikawakatsumi.imageset/STUDENT_SCHOLARSHIP_kishikawakatsumi.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_aaron.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_aaron.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_aaron.imageset/individual_aaron.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_aaron.imageset/individual_aaron.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_arasan01.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_arasan01.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_arasan01.imageset/individual_arasan01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_arasan01.imageset/individual_arasan01.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_banjun.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_banjun.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_banjun.imageset/individual_banjun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_banjun.imageset/individual_banjun.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_econa77.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_econa77.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_econa77.imageset/individual_econa77.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_econa77.imageset/individual_econa77.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_giginet.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_giginet.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_giginet.imageset/individual_giginet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_giginet.imageset/individual_giginet.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_hcrane.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_hcrane.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_hcrane.imageset/individual_hcrane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_hcrane.imageset/individual_hcrane.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_jollyjoester.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_jollyjoester.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_jollyjoester.imageset/individual_jollyjoester.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_jollyjoester.imageset/individual_jollyjoester.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_justin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_justin.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_justin.imageset/individual_justin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_justin.imageset/individual_justin.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_kishikawa_katsumi.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_kishikawa_katsumi.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_kishikawa_katsumi.imageset/individual_kishikawa_katsumi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_kishikawa_katsumi.imageset/individual_kishikawa_katsumi.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_lihsuan_chen.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_lihsuan_chen.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_lihsuan_chen.imageset/individual_lihsuan_chen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_lihsuan_chen.imageset/individual_lihsuan_chen.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_lovee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_lovee.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_lovee.imageset/individual_lovee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_lovee.imageset/individual_lovee.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_nao.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_nao.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_nao.imageset/individual_nao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_nao.imageset/individual_nao.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_noppe.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_noppe.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_noppe.imageset/individual_noppe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_noppe.imageset/individual_noppe.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_ooba.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_ooba.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_ooba.imageset/individual_ooba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_ooba.imageset/individual_ooba.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_scenee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_scenee.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_scenee.imageset/individual_scenee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_scenee.imageset/individual_scenee.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_sean_labastille.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_sean_labastille.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_sean_labastille.imageset/individual_sean_labastille.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_sean_labastille.imageset/individual_sean_labastille.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_shiz.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_shiz.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_shiz.imageset/individual_shiz.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_shiz.imageset/individual_shiz.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_shogo4405.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_shogo4405.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_shogo4405.imageset/individual_shogo4405.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_shogo4405.imageset/individual_shogo4405.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_steven_hiroyuki_aoki.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_steven_hiroyuki_aoki.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_steven_hiroyuki_aoki.imageset/individual_steven_hiroyuki_aoki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_steven_hiroyuki_aoki.imageset/individual_steven_hiroyuki_aoki.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_tamadeveloper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_tamadeveloper.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_tamadeveloper.imageset/individual_tamadeveloper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_tamadeveloper.imageset/individual_tamadeveloper.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_youichi_takatsu.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_youichi_takatsu.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_youichi_takatsu.imageset/individual_youichi_takatsu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_youichi_takatsu.imageset/individual_youichi_takatsu.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_yuji_fujisaka.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "individual_yuji_fujisaka.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_yuji_fujisaka.imageset/individual_yuji_fujisaka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/SponsorFeature/Media.xcassets/individual_yuji_fujisaka.imageset/individual_yuji_fujisaka.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Acknowledgements.swift:
--------------------------------------------------------------------------------
1 | import ComposableArchitecture
2 | import DependencyExtra
3 | import SwiftUI
4 |
5 | @Reducer
6 | public struct Acknowledgements {
7 | @ObservableState
8 | public struct State: Equatable {
9 | var packages = LicensesPlugin.licenses
10 |
11 | public init() {}
12 | }
13 |
14 | public enum Action {
15 | case urlTapped(URL)
16 | }
17 |
18 | @Dependency(\.safari) var safari
19 |
20 | public var body: some ReducerOf {
21 | Reduce { state, action in
22 | switch action {
23 | case let .urlTapped(url):
24 | return .run { _ in await safari(url) }
25 | }
26 | }
27 | }
28 | }
29 |
30 | public struct AcknowledgementsView: View {
31 |
32 | @Bindable public var store: StoreOf
33 | public var body: some View {
34 | List {
35 | ForEach(LicensesPlugin.licenses) { license in
36 | NavigationLink(license.name) {
37 | VStack {
38 | if let licenseText = license.licenseText {
39 | ScrollView {
40 | Text(licenseText)
41 | .padding()
42 | }
43 | } else {
44 | Text("No License Found")
45 | }
46 | }
47 | .navigationTitle(license.name)
48 | }
49 |
50 | }
51 | }
52 | .navigationTitle(Text("Acknowledgements", bundle: .module))
53 | }
54 | }
55 |
56 | #Preview {
57 | NavigationStack {
58 | AcknowledgementsView(
59 | store: .init(initialState: .init()) {
60 | Acknowledgements()
61 | })
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Daiki.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Daiki.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Daiki.imageset/Daiki.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Daiki.imageset/Daiki.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Maru.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Maru.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Maru.imageset/Maru.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Maru.imageset/Maru.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Naoki.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Naoki.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Naoki.imageset/Naoki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Naoki.imageset/Naoki.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Natasha.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Natasha.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Natasha.imageset/Natasha.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Natasha.imageset/Natasha.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Roku.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Roku.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Roku.imageset/Roku.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/Roku.imageset/Roku.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/TimOliver.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "TimOliver.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/TimOliver.imageset/TimOliver.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/TimOliver.imageset/TimOliver.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/akkey.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "akkey.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/akkey.imageset/akkey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/akkey.imageset/akkey.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/elmetal.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "elmetal.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/elmetal.imageset/elmetal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/elmetal.imageset/elmetal.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/kazu42.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "kazu42.jpg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/kazu42.imageset/kazu42.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/kazu42.imageset/kazu42.jpg
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "event_riko.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/logo.imageset/event_riko.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/logo.imageset/event_riko.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/saku.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "saku.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/saku.imageset/saku.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/saku.imageset/saku.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/satoshoco.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "satoshoco.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/satoshoco.imageset/satoshoco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/satoshoco.imageset/satoshoco.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/sya-ri.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "sya-ri.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/sya-ri.imageset/sya-ri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/sya-ri.imageset/sya-ri.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/tamaki.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "tamaki.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/tamaki.imageset/tamaki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/tamaki.imageset/tamaki.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/yucovin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "yucovin.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/yucovin.imageset/yucovin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/yucovin.imageset/yucovin.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/yutailang0119.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "yutailang0119.png",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Media.xcassets/yutailang0119.imageset/yutailang0119.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/MyLibrary/Sources/trySwiftFeature/Media.xcassets/yutailang0119.imageset/yutailang0119.png
--------------------------------------------------------------------------------
/MyLibrary/Sources/trySwiftFeature/Organizers.swift:
--------------------------------------------------------------------------------
1 | import ComposableArchitecture
2 | import DataClient
3 | import SharedModels
4 | import SwiftUI
5 |
6 | @Reducer
7 | public struct Organizers {
8 | @ObservableState
9 | public struct State: Equatable {
10 | var organizers = IdentifiedArrayOf()
11 | @Presents var destination: Destination.State?
12 |
13 | public init(
14 | organizers: IdentifiedArrayOf = [],
15 | destination: Destination.State? = nil
16 | ) {
17 | self.organizers = organizers
18 | self.destination = destination
19 | }
20 | }
21 |
22 | public enum Action: ViewAction {
23 | case view(View)
24 | case destination(PresentationAction)
25 | case delegate(Delegate)
26 |
27 | public enum View {
28 | case onAppear
29 | case _organizerTapped(Organizer)
30 | }
31 |
32 | @CasePathable
33 | public enum Delegate {
34 | case organizerTapped(Organizer)
35 | }
36 | }
37 |
38 | @Reducer(state: .equatable)
39 | public enum Destination {
40 | case profile(Profile)
41 | }
42 |
43 | @Dependency(DataClient.self) var dataClient
44 |
45 | public var body: some ReducerOf {
46 | Reduce { state, action in
47 | switch action {
48 | case .view(.onAppear):
49 | let response = try! dataClient.fetchOrganizers()
50 | state.organizers.append(contentsOf: response)
51 | return .none
52 | case let .view(._organizerTapped(organizer)):
53 | return .send(.delegate(.organizerTapped(organizer)))
54 | case .delegate:
55 | return .none
56 | case .destination:
57 | return .none
58 | }
59 | }
60 | }
61 | }
62 |
63 | @ViewAction(for: Organizers.self)
64 | public struct OrganizersView: View {
65 |
66 | public var store: StoreOf
67 |
68 | public var body: some View {
69 | List {
70 | ForEach(store.organizers) { organizer in
71 | Button {
72 | send(._organizerTapped(organizer))
73 | } label: {
74 | Label {
75 | Text(LocalizedStringKey(organizer.name), bundle: .module)
76 | } icon: {
77 | Image(organizer.imageName, bundle: .module)
78 | .resizable()
79 | .aspectRatio(contentMode: .fit)
80 | .clipShape(Circle())
81 | .accessibilityIgnoresInvertColors()
82 | }
83 | }
84 | }
85 | }
86 | .onAppear {
87 | send(.onAppear)
88 | }
89 | .navigationTitle(Text("Meet Organizers", bundle: .module))
90 | }
91 | }
92 |
93 | #Preview {
94 | OrganizersView(
95 | store: .init(
96 | initialState: .init(),
97 | reducer: {
98 | Organizers()
99 | }))
100 | }
101 |
--------------------------------------------------------------------------------
/MyLibrary/Tests/ScheduleFeatureTests/Mocks.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import SharedModels
3 |
4 | extension Conference {
5 | static let mock1 = Self(
6 | id: 1,
7 | title: "conference1",
8 | date: Date(timeIntervalSince1970: 1_000),
9 | schedules: [
10 | .init(
11 | time: Date(timeIntervalSince1970: 10_000),
12 | sessions: [
13 | .mock1,
14 | .mock2,
15 | ]
16 | )
17 | ]
18 | )
19 |
20 | static let mock2 = Self(
21 | id: 2,
22 | title: "conference2",
23 | date: Date(timeIntervalSince1970: 2_000),
24 | schedules: [
25 | .init(
26 | time: Date(timeIntervalSince1970: 20_000),
27 | sessions: [
28 | .mock1,
29 | .mock2,
30 | ]
31 | )
32 | ]
33 | )
34 |
35 | static let mock3 = Self(
36 | id: 3,
37 | title: "conference3",
38 | date: Date(timeIntervalSince1970: 3_000),
39 | schedules: [
40 | .init(
41 | time: Date(timeIntervalSince1970: 30_000),
42 | sessions: [
43 | .mock1,
44 | .mock2,
45 | ]
46 | )
47 | ]
48 | )
49 | }
50 |
51 | extension Session {
52 | static let mock1 = Self(
53 | title: "session1",
54 | speakers: [
55 | .mock1
56 | ],
57 | place: "place1",
58 | description: "description1",
59 | requirements: "requirements1"
60 | )
61 |
62 | static let mock2 = Self(
63 | title: "session2",
64 | speakers: [
65 | .mock2
66 | ],
67 | place: "place2",
68 | description: "description2",
69 | requirements: "requirements2"
70 | )
71 | }
72 |
73 | extension Speaker {
74 | static let mock1 = Self(
75 | name: "speaker1",
76 | imageName: "image1",
77 | bio: "bio1",
78 | links: [
79 | .init(
80 | name: "sns1",
81 | url: URL(string: "https://example.com/speaker1")!
82 | )
83 | ]
84 | )
85 |
86 | static let mock2 = Self(
87 | name: "speaker2",
88 | imageName: "image2",
89 | bio: "bio2",
90 | links: [
91 | .init(
92 | name: "sns2",
93 | url: URL(string: "https://example.com/speaker2")!
94 | )
95 | ]
96 | )
97 | }
98 |
--------------------------------------------------------------------------------
/MyLibrary/Tests/ScheduleFeatureTests/ScheduleTests.swift:
--------------------------------------------------------------------------------
1 | import ComposableArchitecture
2 | import DataClient
3 | import XCTest
4 |
5 | @testable import ScheduleFeature
6 |
7 | final class ScheduleTests: XCTestCase {
8 | @MainActor
9 | func testFetchData() async {
10 | let store = TestStore(initialState: Schedule.State()) {
11 | Schedule()
12 | } withDependencies: {
13 | $0[DataClient.self].fetchDay1 = { @Sendable in .mock1 }
14 | $0[DataClient.self].fetchDay2 = { @Sendable in .mock2 }
15 | $0[DataClient.self].fetchDay3 = { @Sendable in .mock3 }
16 | }
17 | await store.send(.view(.onAppear))
18 | await store.receive(\.fetchResponse.success) {
19 | $0.day1 = .mock1
20 | $0.day2 = .mock2
21 | $0.day3 = .mock3
22 | }
23 | }
24 |
25 | @MainActor
26 | func testFetchDataFailure() async {
27 | struct FetchError: Equatable, Error {}
28 | let store = TestStore(initialState: Schedule.State()) {
29 | Schedule()
30 | } withDependencies: {
31 | $0[DataClient.self].fetchDay1 = { @Sendable in throw FetchError() }
32 | $0[DataClient.self].fetchDay2 = { @Sendable in .mock2 }
33 | $0[DataClient.self].fetchDay3 = { @Sendable in .mock3 }
34 | }
35 | await store.send(.view(.onAppear))
36 | await store.receive(\.fetchResponse.failure)
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/MyLibrary/Tests/SponsorFeatureTests/Mocks.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import SharedModels
3 |
4 | extension Sponsors {
5 | static let mock = Self(
6 | platinum: [.platinumMock],
7 | gold: [.goldMock],
8 | silver: [],
9 | bronze: [],
10 | diversity: [],
11 | student: [],
12 | community: [],
13 | individual: []
14 | )
15 | }
16 |
17 | extension Sponsor {
18 | static let platinumMock = Self(
19 | id: 1,
20 | name: "platinaum sponsor",
21 | imageName: "platinum_image",
22 | link: URL(string: "https://example.com/platinum")!
23 | )
24 |
25 | static let goldMock = Self(
26 | id: 2,
27 | name: "gold sponsor",
28 | imageName: "gold_image",
29 | link: URL(string: "https://example.com/gold")!
30 | )
31 | }
32 |
--------------------------------------------------------------------------------
/MyLibrary/Tests/SponsorFeatureTests/SponsorsTests.swift:
--------------------------------------------------------------------------------
1 | import ComposableArchitecture
2 | import DataClient
3 | import DependencyExtra
4 | import SharedModels
5 | import XCTest
6 |
7 | @testable import SponsorFeature
8 |
9 | final class SponsorsTests: XCTestCase {
10 | @MainActor
11 | func testOnAppear() async {
12 | let store = TestStore(initialState: SponsorsList.State()) {
13 | SponsorsList()
14 | } withDependencies: {
15 | $0[DataClient.self].fetchSponsors = { @Sendable in .mock }
16 | }
17 |
18 | await store.send(\.view.onAppear) {
19 | $0.sponsors = .mock
20 | }
21 | }
22 |
23 | @MainActor
24 | func testSponsorTapped() async {
25 | let receivedUrl = LockIsolated(nil)
26 |
27 | let store = TestStore(initialState: SponsorsList.State()) {
28 | SponsorsList()
29 | } withDependencies: {
30 | $0.safari = { @Sendable in
31 | SafariEffect { url in
32 | receivedUrl.withValue {
33 | $0 = url
34 | return true
35 | }
36 | }
37 | }()
38 | }
39 |
40 | await store.send(\.view.sponsorTapped, .platinumMock)
41 | receivedUrl.withValue {
42 | XCTAssertEqual($0, Sponsor.platinumMock.link)
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/MyLibrary/Tests/trySwiftFeatureTests/Mocks.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import SharedModels
3 |
4 | extension Organizer {
5 | static let alice = Self(
6 | id: 1,
7 | name: "alice",
8 | imageName: "Alice",
9 | bio: "",
10 | links: [
11 | Link(
12 | name: "@alice",
13 | url: URL(string: "https://example.com/alice")!
14 | )
15 | ]
16 | )
17 |
18 | static let bob = Self(
19 | id: 2,
20 | name: "bob",
21 | imageName: "Bob",
22 | bio: "",
23 | links: [
24 | Link(
25 | name: "@bob",
26 | url: URL(string: "https://example.com/bob")!
27 | )
28 | ]
29 | )
30 | }
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # try! Swift Tokyo App
2 |
3 | This is the official app for try! Swift Tokyo 2024.
4 |
5 | ## Features
6 |
7 | We've submitted the app to the App Store as MVP, and it's currently under review. Here's a list of features that are currently available and those that are planned for future releases:
8 |
9 | - [x] View the schedule
10 | - [x] View the sponsors
11 | - [ ] Check your favorite sessions
12 | - [ ] Receive notifications for upcoming sessions
13 | - [x] Localize the app in English and Japanese (partially done)
14 | - [ ] macOS support
15 | - [ ] watchOS support
16 | - [ ] tvOS support
17 | - [x] visionOS support
18 |
19 | ## Requirements
20 |
21 | - Xcode 15.3 and later (Swift 5.10 and later)
22 |
23 | ## Installation
24 |
25 | Available on the App Store soon, or you can build the app yourself. See the [Getting Started](#getting-started) section for more information.
26 |
27 | ## Getting Started
28 |
29 | 1. Clone the repository
30 | 2. Open `trySwiftTokyo.xcworkspace` in Xcode
31 | 3. Build and run the app
32 |
33 | ## Contributing
34 |
35 | We welcome contributions to the app! Please refer to the [Contributing Guidelines](CONTRIBUTING.md) for more information.
36 |
37 | ## History of try! Swift App
38 |
39 | The first try! Swift app (a repository named final) was released in 2016. At the time, it was written in Swift 3. Now is a good time for a new app, so We rebuilt it based on TCA and SwiftUI. Please take a look and enjoy.
40 | https://github.com/tryswift/trySwiftAppFinal
41 |
42 | ## License
43 |
44 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
45 |
--------------------------------------------------------------------------------
/Website/Assets/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/Website/Assets/images/favicon.png
--------------------------------------------------------------------------------
/Website/Assets/images/footer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/Website/Assets/images/footer.png
--------------------------------------------------------------------------------
/Website/Assets/images/head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/Website/Assets/images/head.png
--------------------------------------------------------------------------------
/Website/Assets/images/intersect.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/Website/Assets/images/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tryswift/try-swift-tokyo/ec86d1db1ae101115027f88feecefe7e1e178947/Website/Assets/images/title.png
--------------------------------------------------------------------------------
/Website/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 5.9
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "Website",
8 | defaultLocalization: "en",
9 | platforms: [.macOS(.v14)],
10 | dependencies: [
11 | .package(url: "https://github.com/twostraws/Ignite", from: "0.6.0"),
12 | .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "1.2.0"),
13 | .package(path: "../MyLibrary")
14 | ],
15 | targets: [
16 | .executableTarget(
17 | name: "Website",
18 | dependencies: [
19 | "Ignite",
20 | .product(name: "Dependencies", package: "swift-dependencies"),
21 | .product(name: "DataClient", package: "MyLibrary"),
22 | .product(name: "ScheduleFeature", package: "MyLibrary"),
23 | .product(name: "trySwiftFeature", package: "MyLibrary"),
24 | ],
25 | resources: [
26 | .process("Resources")
27 | ]
28 | ),
29 | ]
30 | )
31 |
--------------------------------------------------------------------------------
/Website/Sources/Components/AccessComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct AccessComponent: HTML {
4 | let language: SupportedLanguage
5 | private let venueMapUrl = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d12959.484415464616!2d139.4122493!3d35.7047894!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x6018e16a387013a3%3A0xcd9c50e33a16ff6b!2sTachikawa%20Stage%20Garden!5e0!3m2!1sen!2sjp!4v1720059016768!5m2!1sen!2sjp"
6 |
7 | var body: some HTML {
8 | ZStack(alignment: .bottom) {
9 | Section {
10 | Spacer()
11 | Image("/images/footer.png", description: "background image of footer")
12 | .resizable()
13 | .frame(width: .percent(100%))
14 | }
15 | VStack {
16 | Text(String("Access", language: language))
17 | .horizontalAlignment(.center)
18 | .font(.title1)
19 | .foregroundStyle(.white)
20 | .padding(.top, .px(80))
21 |
22 | Section {
23 | Text(String("TACHIKAWA STAGE GARDEN", language: language))
24 | .font(.title3)
25 | .foregroundStyle(.white)
26 | Text(String("N1, 3-3, Midori-cho, Tachikawa, Tokyo
190-0014", language: language))
27 | .font(.lead)
28 | .foregroundStyle(.white)
29 | }
30 | .horizontalAlignment(.leading)
31 | .margin(.top, .px(32))
32 |
33 | Embed(title: "map", url: venueMapUrl)
34 | .aspectRatio(.r4x3)
35 | .margin(.bottom, .px(16))
36 | .margin(.vertical, .px(8))
37 | .frame(width: .percent(50%))
38 |
39 | Section {
40 | MainFooter(language: language)
41 | .foregroundStyle(.white)
42 | IgniteFooter()
43 | .foregroundStyle(.white)
44 | }.margin(.top, .px(160))
45 | }
46 | .frame(width: .percent(100%))
47 | .ignorePageGutters(false)
48 | }
49 | .background(
50 | Gradient(
51 | colors: [.limeGreen, .skyBlue],
52 | type: .linear(angle: 0)
53 | )
54 | )
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Website/Sources/Components/CenterAlignedGrid.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | /// This is a workaround to center when the number of elements is less than `columns`
4 | struct CenterAlignedGrid: HTML {
5 | private let data: Data
6 | private let columns: Int
7 | private let content: (Data.Element) -> Content
8 |
9 | var body: some HTML {
10 | let splittedItems = data.map { $0 }.splitBy(subSize: columns)
11 | ForEach(splittedItems) { items in
12 | Grid {
13 | ForEach(items) { item in
14 | content(item)
15 | }
16 | }
17 | .columns(items.count)
18 | .horizontalAlignment(.center)
19 | }
20 | }
21 |
22 | init(_ data: Data, columns: Int, @HTMLBuilder content: @escaping (Data.Element) -> Content) {
23 | self.data = data
24 | self.columns = columns
25 | self.content = content
26 | }
27 | }
28 |
29 | private extension Array {
30 | func splitBy(subSize: Int) -> [[Element]] {
31 | return stride(from: .zero, to: self.count, by: subSize).map { startIndex in
32 | let endIndex = Swift.min(startIndex.advanced(by: subSize), self.count)
33 | return Array(self[startIndex.. String
5 | let currentLanguage: SupportedLanguage
6 |
7 | var body: some InlineElement {
8 | InlineForEach(SupportedLanguage.allCases) { language in
9 | Link(language.name, target: path(language))
10 | .role(currentLanguage == language ? .light : .secondary)
11 | .fontWeight(currentLanguage == language ? .bold : .regular)
12 | .margin(.trailing, .px(16))
13 | }
14 | }
15 | }
16 |
17 | private extension SupportedLanguage {
18 | var name: String {
19 | switch self {
20 | case .ja: return "日本語"
21 | case .en: return "English"
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Website/Sources/Components/MainFooter.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import Ignite
3 |
4 | struct MainFooter: HTML {
5 | let language: SupportedLanguage
6 |
7 | var body: some HTML {
8 | Column {
9 | Text {
10 | Link(String("Code of Conduct", language: language), target: CodeOfConduct(language: language))
11 | .role(.light)
12 | .margin(.trailing, .small)
13 | Link(String("Privacy Policy", language: language), target: PrivacyPolicy(language: language))
14 | .role(.light)
15 | }
16 | .horizontalAlignment(.center)
17 | .font(.body)
18 | .fontWeight(.semibold)
19 |
20 | Text("© 2016 try! Swift Tokyo")
21 | .horizontalAlignment(.center)
22 | .font(.body)
23 | .fontWeight(.light)
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Website/Sources/Components/MainFooterWithBackground.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct MainFooterWithBackground: HTML {
4 | let language: SupportedLanguage
5 |
6 | var body: some HTML {
7 | ZStack(alignment: .bottom) {
8 | Section {
9 | Spacer()
10 | Image("/images/footer.png", description: "background image of footer")
11 | .resizable()
12 | .frame(width: .percent(100%))
13 | }
14 | Section {
15 | MainFooter(language: language)
16 | .foregroundStyle(.white)
17 | IgniteFooter()
18 | .foregroundStyle(.white)
19 | }
20 | .horizontalAlignment(.center)
21 | .margin(.top, .px(160))
22 | }
23 | .ignorePageGutters()
24 | .background(
25 | Gradient(
26 | colors: [.limeGreen, .skyBlue],
27 | type: .linear(angle: 0)
28 | )
29 | )
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Website/Sources/Components/MainNavigationBar.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct MainNavigationBar: HTML {
4 | let path: (SupportedLanguage) -> String
5 | let sections: [HomeSectionType]
6 | let language: SupportedLanguage
7 |
8 | var body: some HTML {
9 | NavigationBar {
10 | for section in sections {
11 | let target: String = {
12 | let homePath = Home.generatePath(language: language)
13 | return path(language) == homePath ? "#\(section.htmlId)" : "\(homePath)#\(section.htmlId)"
14 | }()
15 | Link(String(section.rawValue, language: language), target: target)
16 | .role(.light)
17 | }
18 | Link(String("FAQ", language: language), target: FAQ(language: language))
19 | .role(.light)
20 | } logo: {
21 | LanguageSelector(path: path, currentLanguage: language)
22 | }
23 | .navigationBarStyle(.dark)
24 | .background(.darkBlue.opacity(0.7))
25 | .position(.fixedTop)
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Website/Sources/Components/ModalFooterComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct ModalFooterComponent: HTML {
4 | let modalId: String
5 | let language: SupportedLanguage
6 |
7 | var body: some HTML {
8 | Grid {
9 | Button(String("Close", language: language)) {
10 | DismissModal(id: modalId)
11 | }
12 | .role(.light)
13 | .foregroundStyle(.dimGray)
14 |
15 | Text("try! Swift Tokyo 2025")
16 | .horizontalAlignment(.trailing)
17 | .font(.body)
18 | .fontWeight(.bold)
19 | .foregroundStyle(.dimGray)
20 | }.columns(2)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Website/Sources/Components/OrganizerComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 | import SharedModels
3 |
4 | struct OrganizerComponent: HTML {
5 | let organizer: Organizer
6 |
7 | var body: some HTML {
8 | Section {
9 | Image(organizer.imageFilename, description: organizer.name)
10 | .resizable()
11 | .frame(maxWidth: 230, maxHeight: 230)
12 | .cornerRadius(115)
13 | .margin(.bottom, .px(16))
14 | Text(organizer.name)
15 | .font(.title4)
16 | .fontWeight(.medium)
17 | .foregroundStyle(.orangeRed)
18 | }
19 | .horizontalAlignment(.center)
20 | }
21 | }
22 |
23 | struct OrganizerModel: HTML {
24 | let organizer: Organizer
25 | let language: SupportedLanguage
26 | private let imageSize = 75
27 |
28 | var body: some HTML {
29 | Modal(id: organizer.modalId) {
30 | ZStack(alignment: .topLeading) {
31 | Image(organizer.imageFilename, description: organizer.name)
32 | .resizable()
33 | .frame(maxWidth: imageSize, maxHeight: imageSize)
34 | .cornerRadius(imageSize / 2)
35 |
36 | Section {
37 | Text(organizer.name)
38 | .font(.title2)
39 | .foregroundStyle(.bootstrapPurple)
40 |
41 | let bio = String(organizer.bio, bundle: .trySwiftFeature, language: language)
42 | .convertNewlines()
43 | Text(markdown: bio)
44 | .font(.body)
45 | .fontWeight(.regular)
46 | .foregroundStyle(.dimGray)
47 | if let links = organizer.links {
48 | Section {
49 | ForEach(links) { link in
50 | Link(link.name, target: link.url)
51 | .target(.newWindow)
52 | .role(.secondary)
53 | .margin(.trailing, .px(4))
54 | }
55 | }
56 | }
57 | }.margin(.leading, .px(imageSize + 20))
58 | }.padding(.all, .px(16))
59 |
60 | ModalFooterComponent(modalId: organizer.modalId, language: language)
61 | .padding(.all, .px(16))
62 | }.size(.large)
63 | }
64 | }
65 |
66 | extension Organizer {
67 | var imageFilename: String {
68 | "/images/from_app/\(imageName).png"
69 | }
70 |
71 | var modalId: String {
72 | name.replacingOccurrences(of: "'", with: "")
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/Website/Sources/Components/OutlineComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct OutlineComponent: HTML {
4 | let language: SupportedLanguage
5 |
6 | var body: some HTML {
7 | Table {
8 | Row {
9 | Column {
10 | String("Date and time", language: language)
11 | }
12 | .fontWeight(.bold)
13 | .foregroundStyle(.dimGray)
14 | Column {
15 | String("Apr. 9th - 11th, 2025", language: language)
16 | }
17 | .foregroundStyle(.dimGray)
18 | }
19 | Row {
20 | Column {
21 | String("Venue", language: language)
22 | }
23 | .fontWeight(.bold)
24 | .foregroundStyle(.dimGray)
25 | Column {
26 | String("TACHIKAWA STAGE GARDEN
N1, 3-3, Midori-cho, Tachikawa, Tokyo 190-0014", language: language)
27 | }
28 | .foregroundStyle(.dimGray)
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Website/Sources/Components/SectionHeader.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct SectionHeader: HTML {
4 | let type: HomeSectionType
5 | let language: SupportedLanguage
6 |
7 | var body: some HTML {
8 | ZStack(alignment: .center) {
9 | Text(String(type.rawValue, language: language))
10 | .horizontalAlignment(.center)
11 | .font(.title1)
12 | .fontWeight(.bold)
13 | .foregroundStyle(.bootstrapPurple)
14 | }
15 | .padding(.top, .px(80))
16 | .padding(.bottom, .px(32))
17 | .margin(.bottom, .px(32))
18 | .border(.bootstrapPurple, width: 2, edges: .bottom)
19 | .id(type.htmlId)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Website/Sources/Components/SectionListComponent.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import Ignite
3 |
4 | protocol SectionDefinition: RawRepresentable, CaseIterable where RawValue == String {
5 | var title: String { get }
6 | var description: String { get }
7 | }
8 |
9 | extension SectionDefinition {
10 | var title: String {
11 | rawValue
12 | }
13 | }
14 |
15 | struct SectionListComponent: HTML {
16 | let title: String
17 | let dataSource: [any SectionDefinition]
18 | let language: SupportedLanguage
19 |
20 | var body: some HTML {
21 | Text(title)
22 | .horizontalAlignment(.center)
23 | .font(.title1)
24 | .fontWeight(.bold)
25 | .foregroundStyle(.bootstrapPurple)
26 |
27 | ForEach(dataSource) { sectionType in
28 | Section {
29 | Text(String(sectionType.title, language: language))
30 | .horizontalAlignment(.center)
31 | .font(.title2)
32 | .fontWeight(.bold)
33 | .foregroundStyle(.bootstrapPurple)
34 | .margin(.top, .px(80))
35 | .margin(.bottom, .px(16))
36 |
37 | let description = String(sectionType.description, language: language)
38 | Text(markdown: description)
39 | .horizontalAlignment(description.displayedCharacterCount() > 100 ? .leading : .center)
40 | .font(.body)
41 | .foregroundStyle(.dimGray)
42 | }
43 | }
44 | }
45 | }
46 |
47 | private extension String {
48 | func displayedCharacterCount() -> Int {
49 | guard let data = self.data(using: .utf8) else {
50 | return .zero
51 | }
52 | let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
53 | .documentType: NSAttributedString.DocumentType.html,
54 | .characterEncoding: String.Encoding.utf8.rawValue
55 | ]
56 | let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil)
57 |
58 | return attributedString?.string.count ?? .zero
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/Website/Sources/Components/SpeakerComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 | import SharedModels
3 |
4 | struct SpeakerComponent: HTML {
5 | let speaker: Speaker
6 |
7 | var body: some HTML {
8 | Section {
9 | Image(speaker.imageFilename, description: speaker.name)
10 | .resizable()
11 | .frame(maxWidth: 230, maxHeight: 230)
12 | .cornerRadius(115)
13 | .margin(.bottom, .px(16))
14 | Text(speaker.name)
15 | .font(.title4)
16 | .fontWeight(.medium)
17 | .foregroundStyle(.orangeRed)
18 | if let jobTitle = speaker.jobTitle {
19 | Text(jobTitle)
20 | .font(.body)
21 | .fontWeight(.thin)
22 | .foregroundStyle(.gray)
23 | }
24 | }
25 | .horizontalAlignment(.center)
26 | }
27 | }
28 |
29 | struct SpeakerModal: HTML {
30 | let speaker: Speaker
31 | let language: SupportedLanguage
32 |
33 | var body: some HTML {
34 | Modal(id: speaker.modalId) {
35 | SpeakerDetailComponent(speaker: speaker, language: language)
36 | ModalFooterComponent(modalId: speaker.modalId, language: language)
37 | .padding(.all, .px(16))
38 | }.size(.large)
39 | }
40 | }
41 |
42 | extension Speaker {
43 | var imageFilename: String {
44 | "/images/from_app/\(imageName).png"
45 | }
46 |
47 | var modalId: String {
48 | name.replacingOccurrences(of: "'", with: "")
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Website/Sources/Components/SpeakerDetailComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 | import SharedModels
3 |
4 | struct SpeakerDetailComponent: HTML {
5 | let speaker: Speaker
6 | let language: SupportedLanguage
7 | private let imageSize = 75
8 |
9 | var body: some HTML {
10 | ZStack(alignment: .topLeading) {
11 | Image(speaker.imageFilename, description: speaker.name)
12 | .resizable()
13 | .frame(maxWidth: imageSize, maxHeight: imageSize)
14 | .cornerRadius(imageSize / 2)
15 |
16 | Section {
17 | Text(speaker.name)
18 | .font(.title2)
19 | .foregroundStyle(.bootstrapPurple)
20 |
21 | if let bio = speaker.bio {
22 | let localizedBio = String(bio, bundle: .scheduleFeature, language: language)
23 | .convertNewlines()
24 | Text(markdown: localizedBio)
25 | .font(.body)
26 | .fontWeight(.regular)
27 | .foregroundStyle(.dimGray)
28 | }
29 | if let links = speaker.links {
30 | Section {
31 | ForEach(links) { link in
32 | Link(link.name, target: link.url)
33 | .target(.newWindow)
34 | .role(.secondary)
35 | .margin(.trailing, .px(4))
36 | }
37 | }
38 | }
39 | }.margin(.leading, .px(imageSize + 20))
40 | }.padding(.all, .px(16))
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Website/Sources/Components/SponsorComponent.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import Ignite
3 | import SharedModels
4 |
5 | struct SponsorComponent: HTML {
6 | let sponsor: Sponsor
7 | let size: CGSize
8 | let language: SupportedLanguage
9 |
10 | var body: some HTML {
11 | var image: any InlineElement {
12 | Image(sponsor.imageFilename, description: sponsor.name ?? "sponsor logo")
13 | .resizable()
14 | .frame(maxWidth: Int(size.width), maxHeight: Int(size.height))
15 | .margin(.bottom, .px(16))
16 | }
17 | if let target = sponsor.getLocalizedLink(language: language)?.absoluteString {
18 | Link(image, target: target)
19 | .target(.newWindow)
20 | } else {
21 | image
22 | }
23 | }
24 | }
25 |
26 | private extension Sponsor {
27 | func getLocalizedLink(language: SupportedLanguage) -> URL? {
28 | switch language {
29 | case .ja: japaneseLink ?? link
30 | case .en: link
31 | }
32 | }
33 |
34 | var imageFilename: String {
35 | "/images/from_app/\(imageName).png"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Website/Sources/Components/TicketsComponent.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct TicketsComponent: HTML {
4 | let language: SupportedLanguage
5 |
6 | var body: some HTML {
7 | Section {
8 | Text(markdown: String(
9 | "You can get ticket from Luma or get from below.
Before getting ticket please read [FAQ](/faq_en).",
10 | language: language
11 | ))
12 | .font(.lead)
13 | .foregroundStyle(.dimGray)
14 | .margin(.bottom, .px(20))
15 | Embed(
16 | title: String("Tickets", language: language),
17 | url: "https://lu.ma/embed/event/evt-iaERdyhafeQdV5f/simple"
18 | )
19 | .aspectRatio(0.75)
20 | .frame(height: .px(1_800))
21 | .margin(.bottom, .px(120))
22 | Text(String("The latest information is announced on X", language: language))
23 | .font(.title3)
24 | .foregroundStyle(.dimGray)
25 | .margin(.bottom, .px(16))
26 | Link(
27 | String("Check updates on X", language: language),
28 | target: "https://x.com/tryswiftconf"
29 | )
30 | .target(.newWindow)
31 | .linkStyle(.button)
32 | .role(.light)
33 | .font(.lead)
34 | .fontWeight(.medium)
35 | .foregroundStyle(.orangeRed)
36 | }.horizontalAlignment(.center)
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Website/Sources/Extensions/Date+.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | extension Date {
4 | func formattedDateString(language: SupportedLanguage) -> String {
5 | let formatter = DateFormatter()
6 | formatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
7 | switch language {
8 | case .en:
9 | let day = Calendar.current.component(.day, from: self)
10 | let ordinal = NumberFormatter.localizedString(from: NSNumber(value: day), number: .ordinal)
11 | formatter.dateFormat = "MMMM"
12 | return formatter.string(from: self) + " \(ordinal)"
13 | case .ja:
14 | formatter.dateFormat = "M月d日"
15 | return formatter.string(from: self)
16 | }
17 | }
18 |
19 | func formattedTimeString() -> String {
20 | let formatter = DateFormatter()
21 | formatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
22 | formatter.dateFormat = "HH:mm"
23 | return formatter.string(from: self)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Website/Sources/Extensions/Ignite.Image+.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | extension Image {
4 | static var defaultImage: Self {
5 | .init("/images/from_app/app_icon.png", description: "default icon")
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/Website/Sources/Extensions/String+.swift:
--------------------------------------------------------------------------------
1 | extension String {
2 | func convertNewlines() -> String {
3 | replacingOccurrences(of: "\n\n", with: "\n
")
4 | .replacingOccurrences(of: "\n", with: " \n")
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Website/Sources/Layouts/MainLayout.swift:
--------------------------------------------------------------------------------
1 | import Ignite
2 |
3 | struct MainLayout: Layout {
4 | @Environment(\.page) private var currentPage
5 | let title: String
6 | let ogpLink: String
7 |
8 | var body: some Document {
9 | Head {
10 | MetaTag(.openGraphTitle, content: title)
11 | MetaTag(.openGraphImage, content: ogpLink)
12 | MetaTag(.twitterTitle, content: title)
13 | MetaTag(.twitterImage, content: ogpLink)
14 |
15 | if currentPage.url.pathComponents.last == "_en" {
16 | let redirectUrl = URL(string: currentPage.url.absoluteString.replacingOccurrences(of: "_", with: ""))!
17 | MetaTag(httpEquivalent: "refresh", content: "0;url=\(redirectUrl.absoluteString)")
18 | }
19 | }
20 |
21 | Body {
22 | content
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Website/Sources/Pages/Home.swift:
--------------------------------------------------------------------------------
1 | import DataClient
2 | import Dependencies
3 | import Foundation
4 | import Ignite
5 | import SharedModels
6 |
7 | struct Home: StaticPage {
8 | let language: SupportedLanguage
9 | var title = ""
10 |
11 | var path: String {
12 | Home.generatePath(language: language)
13 | }
14 |
15 | var description: String {
16 | String(
17 | "Developers from all over the world will gather for tips and tricks and the latest examples of development using Swift. The event will be held for three days from April 9 - 11, 2025, with the aim of sharing our Swift knowledge and skills and collaborating with each other!",
18 | language: language
19 | )
20 | }
21 |
22 | @Dependency(DataClient.self) var dataClient
23 |
24 | var body: some HTML {
25 | MainNavigationBar(
26 | path: Home.generatePath(language:),
27 | sections: HomeSectionType.navigationItems,
28 | language: language
29 | )
30 |
31 | ForEach(HomeSectionType.allCases) { sectionType in
32 | sectionType.generateContents(language: language, dataClient: dataClient)
33 | }
34 | }
35 |
36 | static func generatePath(language: SupportedLanguage) -> String {
37 | switch language {
38 | case .ja: "/"
39 | case .en: "/en"
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Website/Sources/Pages/Localization.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | enum SupportedLanguage: String, CaseIterable {
4 | case ja
5 | case en
6 | }
7 |
8 | extension String {
9 | init(_ key: String, bundle: Bundle = .module, language: SupportedLanguage) {
10 | // The xcstrings file is converted to an lproj file during the build process.
11 | // This code references the converted file.
12 | guard let path = bundle.path(forResource: language.rawValue, ofType: "lproj"),
13 | let localizedBundle = Bundle(path: path) else {
14 | fatalError()
15 | }
16 | self.init(NSLocalizedString(key, bundle: localizedBundle, comment: ""))
17 | }
18 | }
19 |
20 | extension Bundle {
21 | static var scheduleFeature: Bundle {
22 | let bundlePath = Bundle.main.resourceURL!.appendingPathComponent("MyLibrary_ScheduleFeature.bundle")
23 | return .init(url: bundlePath)!
24 | }
25 |
26 | static var trySwiftFeature: Bundle {
27 | let bundlePath = Bundle.main.resourceURL!.appendingPathComponent("MyLibrary_trySwiftFeature.bundle")
28 | return .init(url: bundlePath)!
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/ci_scripts/ci_post_clone.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
4 | defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES
5 |
--------------------------------------------------------------------------------
/trySwiftTokyo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/trySwiftTokyo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------