├── .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 | 2 | 3 | 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 | --------------------------------------------------------------------------------