diff --git a/.swiftlint.yml b/.swiftlint.yml index 2748f83..067ce3b 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -3,6 +3,8 @@ disabled_rules: - leading_whitespace - force_try - function_body_length + - large_tuple + - type_body_length excluded: - Pods diff --git a/RespectU.xcodeproj/project.pbxproj b/RespectU.xcodeproj/project.pbxproj index f3029b6..f6ffeac 100644 --- a/RespectU.xcodeproj/project.pbxproj +++ b/RespectU.xcodeproj/project.pbxproj @@ -7,219 +7,219 @@ objects = { /* Begin PBXBuildFile section */ - 0179E468A4893A10BE09245347B49401 /* MissionDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1D1400F4F8A5579A4BD339D8661CC6 /* MissionDetailViewController.swift */; }; - 018B35D50D5676BBBCC54CCB3CA661C1 /* RecordCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8872346BBBB0B7BAFD7D7D14AB637E94 /* RecordCell.xib */; }; - 02686C509DF00D9696587DEEA60DA1AD /* RecordDifficultyInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE923EF715087FF2BBEAA80043390A02 /* RecordDifficultyInfo.swift */; }; - 0380D257C2F539A6344259BF2EFED65A /* MissionSection.CE+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CBAA567778CAD53CB93CE152F92D55 /* MissionSection.CE+Gradient.swift */; }; - 03E7939635EDE9C2551CF5AD294F582D /* APIService+Mission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67F8ADF69CF51420637315B6B1CB9B3F /* APIService+Mission.swift */; }; - 05BF8B1DD9D1CFFE3909352A0062808D /* SongTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ABC647AFC387EECD6791F100EBED31D /* SongTechnika1TableViewController.swift */; }; - 067CB8ADCA8BA53E3AF6B4A7C94E5AB7 /* Record.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D13809AF4354422A199374B3465D8656 /* Record.storyboard */; }; - 07E412854081E98BAA9EC7826338343C /* MissionBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5735B28DC786C25122A478189A9D7A /* MissionBSTableViewController.swift */; }; - 09E17333AB311C09221D5BDD854CAAF5 /* RecordTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C86C6C9262E8EB75FB7589033C1F2EC4 /* RecordTechnika1TableViewController.swift */; }; - 0AD398A653F247BBD797BF1C08117411 /* RecordButtonInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D774173D345CCDC64F1E65BA46CC48A /* RecordButtonInfo.swift */; }; - 0CEF469A149FF36E867CC3A161165AF9 /* Top504BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB34EF52E48B6B9E32AE64FEDD76C088 /* Top504BTableViewController.swift */; }; + EE5801B1F86B92BE4282BB1D1EAECC52 /* .swiftlint.yml in Resources */ = {isa = PBXBuildFile; fileRef = DA5A4E6832F2B48BFFE29D6EE9E1BFEF /* .swiftlint.yml */; }; + B33FCC0BE699D423F86B0CA60B201E5D /* APIService+Achievement.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE6D08E337A7395C974382D3D49B50ED /* APIService+Achievement.swift */; }; 0EEC0969D24C14614F3852EC64FF8EDE /* APIService+Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14D88E672A1CA362BBF23009477E7C7 /* APIService+Base.swift */; }; + 03E7939635EDE9C2551CF5AD294F582D /* APIService+Mission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67F8ADF69CF51420637315B6B1CB9B3F /* APIService+Mission.swift */; }; + FB483D4534B0C1A9CB4E62CBBCB678DB /* APIService+Ranking.swift in Sources */ = {isa = PBXBuildFile; fileRef = A52641BDB047E88FFE60B9F1EB7F89D8 /* APIService+Ranking.swift */; }; + 42DD4D7660CB5C856E21164943943414 /* APIService+Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6594C9F6573B04AED144F6F3F3B9AA6 /* APIService+Record.swift */; }; + 2C72DE5923F7655BC252D19C1068F813 /* APIService+Song.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF131ED7C45FABB6AD6B1A75998373F8 /* APIService+Song.swift */; }; + B614B0C989214B6E5E0AE3994B6DA84D /* APIService+Tip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EC376E253CB7630E7BAC771AB75FC10 /* APIService+Tip.swift */; }; + B49EF0D157083F66A516584A093A9775 /* APIService+Trophy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DFBF524855854CAC775CF09B6A5F92 /* APIService+Trophy.swift */; }; 12AD6ED4E6B2F3FCB7E5FBD427D0BEAA /* APIService+User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B53CFCFD9ABD97DDA14CD35ACDFB94D /* APIService+User.swift */; }; - 14A9C0F1784C4EFB020D45285772036C /* SkillLevelDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0CC6B551EBD0EC656F35FD74247ED8D /* SkillLevelDetailView.swift */; }; - 15D85A72D8E253A709907E22B1B919BA /* SearchRecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C194554A77881C517795E91A8F23124E /* SearchRecordViewController.swift */; }; - 16217B19735F571D4F00B4E714D445A1 /* Series+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9970140918A7A61332718A9C9D8322 /* Series+UI.swift */; }; - 16E72F47E46466C1D0F72348BC1734D2 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7994394D253D83388739913632BF52F4 /* Button.swift */; }; - 1722D64EEA474AA4DB6530A17DA20635 /* TrophyTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A875376A5EBE583D9D47E2CCA367EB4F /* TrophyTechnika3TableViewController.swift */; }; - 1914B51E2236B3E500BA057E /* SearchRecordDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1914B51D2236B3E500BA057E /* SearchRecordDetail.swift */; }; - 1914B520223805BD00BA057E /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1914B51F223805BD00BA057E /* Persistence.swift */; }; - 1B7BDC0518E8261BB7E114B238485E0D /* Double+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C0A70ADF02A515C554A2A7F65D04D0 /* Double+.swift */; }; - 1C4D888E2BECAA7E7447EC6E493D700E /* TrophyBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C2415AABC509E942301DF3589F55F8 /* TrophyBSTableViewController.swift */; }; - 1D5A93ADB7E0551D8265EC21D90E8114 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AF510989C994AF286BAC6EFC98F3D86 /* Note.swift */; }; - 1E64D8217B3A29B37418024823592E66 /* SkillPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E664D69C5666D40413DD76EC3EEB905 /* SkillPoint.swift */; }; - 2012B0E292AE68661A84F90C15CCB7E2 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66F1F16E4879E82613F8C07E0062B2A /* NetworkManager.swift */; }; + 6D1619C4051B8073FDAE2D1EE0F28DF1 /* Achievement.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 282674A18512BC1AEFB6CE490A429E5C /* Achievement.storyboard */; }; + A368D670D9ECB37DBA7FDF40293DCC9F /* AchievementAllTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D208137CF7035F090957DD52BFD704BC /* AchievementAllTableViewController.swift */; }; + 9F424786F18F120DFA3B54AA97CFE58D /* AchievementBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF59229051F5AD6A883EFD1E5A2603E /* AchievementBaseTableViewController.swift */; }; + AD5AD544FF4F2D2C8F1B5317859CF690 /* AchievementCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 623DBE7ABE62C6ED2C6A96D8B561D1BC /* AchievementCell.swift */; }; + DCE96025AC799FDF2C9F73446B22DA1D /* AchievementCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F957C9D0578879C4BFDF188CC7E9DB68 /* AchievementCell.xib */; }; + 77A3641A412E2281169BC43A482D1E91 /* AchievementCommentTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07507A73DE0099DC9CFB4ABA9FB0DC0C /* AchievementCommentTableViewController.swift */; }; + 51224183DF5D5EE431F19419618869BD /* AchievementGalleryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB2A66DC82F6391EEEF838491861F33 /* AchievementGalleryTableViewController.swift */; }; + 79411DF6AB24D237EE95FD55E977CAEA /* AchievementGearTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A0CEB91040D7176F26D4F0FDD21D28 /* AchievementGearTableViewController.swift */; }; + E1CBFF554215B6EE966299F65FC12C15 /* AchievementInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D72B837CDF13537B08A21962C780D70 /* AchievementInfo.swift */; }; + EDDF63E5EFFCFFE2BAEED87EF03CA87B /* AchievementMusicTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C728DBB0614587CD2759E53BD1A65882 /* AchievementMusicTableViewController.swift */; }; + B6352BF809F83287D010471DA3CE8ACC /* AchievementNoteTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18449AAA9B8578063135A1485D123683 /* AchievementNoteTableViewController.swift */; }; 21210F283185F19A775BAC369EA72133 /* AchievementPlateTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08F04BA7E15EC807F3B9CAA3AEF98239 /* AchievementPlateTableViewController.swift */; }; - 2440D6183CA2FD2B1771BD07553F0EA3 /* Series.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ADF8D0329CDE33DD67FC75E36D63E92 /* Series.swift */; }; - 26708994E8417D244AFABB1922A65642 /* RecordPortable2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F75FFB849D9280269D8A4130772A059 /* RecordPortable2TableViewController.swift */; }; - 297DFEEE2C220A5C1F47BAA6F2AC87B7 /* MissionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E6BC6E8EAEFF1FB31DF48435303F350 /* MissionCell.swift */; }; - 2C72DE5923F7655BC252D19C1068F813 /* APIService+Song.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF131ED7C45FABB6AD6B1A75998373F8 /* APIService+Song.swift */; }; - 30370928E902A0A1ADEBB413AFFD9019 /* SongRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A74447C5271E64A723356FA2C76C8 /* SongRespectTableViewController.swift */; }; - 34ADC537FFCD0E32831D26AB2C1DD1B9 /* MissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 274D0B448B5CE4F3F072A2E8F1A08173 /* MissionCell.xib */; }; + 4C17D5C69A95D3C1A2160AE91E036869 /* AchievementResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 181F3BF12F13DC015494221C8902B980 /* AchievementResponse.swift */; }; + B4CB2D7CBA623EA489565AB780044FE6 /* AchievementType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8609566688513F20D56F71E8C2A73E /* AchievementType.swift */; }; + A85CA7512FCCF5A4CD116BCDCD8795A1 /* AchievementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEEACD594FBA67A330D104F816D4D968 /* AchievementViewController.swift */; }; + 9C5BD16964B01CE4E826C0714E7BFB7C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437358F63E7EFA7C3FA6E22357580622 /* AppDelegate.swift */; }; + BE9081C6FD851727989460A4D055C02E /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BBB665B16E2FF2F0BE095960FFA33E /* Assets.swift */; }; + 90AE9C19BBE72AFD47EC3E391B1EAA1A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E683F525A54716C4D6BE56A96EEDCB29 /* Assets.xcassets */; }; + C49BDBE7974F6333739B639CFBC5DB8A /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091109F5110F4F89963C64B091604CEE /* BaseViewController.swift */; }; + 16E72F47E46466C1D0F72348BC1734D2 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7994394D253D83388739913632BF52F4 /* Button.swift */; }; + 94382F584F379628F8CCCEEF51AA8C23 /* CAGradientLayer+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8D863B4192345379FAA072605B014B /* CAGradientLayer+.swift */; }; 36105E909ADA369CB7D0D1B675FED1F4 /* Difficulty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3556AE9C2F4DBEEEF2277634864736F6 /* Difficulty.swift */; }; - 36D90F14658E9A2386E71925147AD3B7 /* SummaryCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7141F43FD5DD9A34D35E2692CB721D4A /* SummaryCollectionCell.swift */; }; + 1B7BDC0518E8261BB7E114B238485E0D /* Double+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C0A70ADF02A515C554A2A7F65D04D0 /* Double+.swift */; }; + 8E46243F171B5DE4C8636DE0C7C4BC09 /* Download.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C18E5F5E8BB5540D91968DDECE31869A /* Download.storyboard */; }; + 53DC6066E155D2567781E494547956C9 /* DownloadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7684A5E7EAE2568B15BCA4F2AEF65CA2 /* DownloadViewController.swift */; }; 38C447D6D1AE123FA0B3D40D21AEE863 /* GradientDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB2C96445D032E82864C978003715B1 /* GradientDirection.swift */; }; - 3ACE06EAF10D0F00AB81B031AFFD4370 /* RankingResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F1B980355224D49337F83B418D77DF9 /* RankingResponse.swift */; }; - 3B5CCA1F7AE3B3E186DCDC5466618711 /* TrophyGrade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4298E98CCC40A6C7EFDE5510CEDED521 /* TrophyGrade.swift */; }; - 3B7DE92472A1872F8D09E85383AE7E95 /* Top50ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365A3C9BFD2062AA5D08B56E995F9474 /* Top50ViewController.swift */; }; - 3B9C2AF499E89D2A4B1386181D2E464C /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D031E416EDBC4C34BC6B3FA0451966 /* MessageUI.framework */; }; 3BB933CDB0A2F0ABF0AD9921098EB4E0 /* Guide.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 43CCCFC971513264AFA7256BA71653C4 /* Guide.storyboard */; }; - 3C2E4343DB314444E72BCA528356A02B /* UploadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04A91E1391EB1A2505BB6E30EB1AD65 /* UploadViewController.swift */; }; - 3FC482296754D98BE86BD7B18E564694 /* SearchByNoteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8DA77CE4436FD7F1B3A85A2993A6875 /* SearchByNoteView.swift */; }; - 402BA1696265B27378F92C7D0EFE5D9A /* RecordPortable1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7CF5FBE9FE442E18A869E8FFDBB6596 /* RecordPortable1TableViewController.swift */; }; - 409ABEBD1C0ACF153D2726D4203EB120 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7897FFE7C5D2CCD0252A92D83D3A242 /* Reachability.swift */; }; - 40A958056F42EC3D295722454F5129D2 /* SignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D774FFC53CC59564C3B6E8255A6FDE76 /* SignUpViewController.swift */; }; - 411A370D58452A171552DFDB8AE6CDFB /* RankingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF44E865CAECD23B67EC669F4F499627 /* RankingCell.xib */; }; - 4153853DD9B533CEB5CB57E06BE93625 /* SongPortable1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06634141A9D0AD50CB5CF1C56489B8AB /* SongPortable1TableViewController.swift */; }; - 42DD4D7660CB5C856E21164943943414 /* APIService+Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6594C9F6573B04AED144F6F3F3B9AA6 /* APIService+Record.swift */; }; - 456CFC7E84339AD858F72E14C0200EAD /* TrophyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C8E87A2B03543FCDFA459E10DCEBCDF /* TrophyCell.swift */; }; - 48175A5C8370F8ED872DDDAD970867BB /* Ranking4BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9EA4615ADDF5106D45E6C157F9935FE /* Ranking4BTableViewController.swift */; }; - 4945A0D92FA68D09476BE7AFB8AE2429 /* SearchByRatingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D550E00BAB0ADC8AEF6EFE91AD2134E9 /* SearchByRatingView.xib */; }; - 4A98A06417A0097FB957083613E33F09 /* Ranking8BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A61C0A29FAF3BAFDEA230CF7D855312 /* Ranking8BTableViewController.swift */; }; - 4AE97EBF1348A5516BE27E7EB403CE28 /* TrophyTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DDBE69BDF91490724A4508E8150A75F /* TrophyTechnika2TableViewController.swift */; }; - 4C17D5C69A95D3C1A2160AE91E036869 /* AchievementResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 181F3BF12F13DC015494221C8902B980 /* AchievementResponse.swift */; }; - 4CB993740AF398D71E90C9EC481F995D /* UIViewController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0933C1D68D4630ABCB0E824F3B06E6FA /* UIViewController+.swift */; }; - 4D93915A70FFA3B0270461492B3EDBCD /* SkillLevelCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 58F94B11D0652E774E5A75E6FC9875E3 /* SkillLevelCell.xib */; }; - 4DB514B43FA2A583C16006541624AD81 /* Storyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A21F405F43A9AF49F10051F778F3FA4 /* Storyboard.swift */; }; - 4F6670BDD18418EB0BACC4C92FE1EA57 /* SongViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7FF17875A680B2300216805CB27FC73 /* SongViewController.swift */; }; - 4FBF2977E66C057D1A9F1F3F19E48E8C /* NicknameResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B34AF7A247BBB042C734DD502A4021B /* NicknameResponse.swift */; }; - 51224183DF5D5EE431F19419618869BD /* AchievementGalleryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB2A66DC82F6391EEEF838491861F33 /* AchievementGalleryTableViewController.swift */; }; - 532E0449B68A85440B2A1E3F2BAF63B4 /* MissionTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1E98FB695B66D5FA11980E8C7618DA /* MissionTechnika3TableViewController.swift */; }; - 53DC6066E155D2567781E494547956C9 /* DownloadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7684A5E7EAE2568B15BCA4F2AEF65CA2 /* DownloadViewController.swift */; }; - 54CB14A1152EBED5F62581A197D9DB51 /* Pods_RespectU.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 720D3E6C26142ACBA59C9F7822C204CC /* Pods_RespectU.framework */; }; - 554C372C44FEB3224C5EAE6E722D3D2B /* TrophyBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C865E14A01D3C67FEEE5EAF375899C7D /* TrophyBaseTableViewController.swift */; }; - 56B103D4D21450CC4D0BC3D98286A3AF /* SearchByLevelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CA587AC64BBF7D9615B18AE922CCA5 /* SearchByLevelView.swift */; }; - 57A9D23286BDA314BEC501224189EFE7 /* TrophyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A0585B9094D54EA2EE91A30C6265FA /* TrophyViewController.swift */; }; - 59A0935E9841AE2C2D2936507EBD985B /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B7E2EA07502142424EC51FE1C1D182 /* Strings.swift */; }; - 5A54507509E4E4DC3181C3FCB74FBBC0 /* MissionSection.Technika3+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBF7FCA66B507564BF411BB82D824394 /* MissionSection.Technika3+Gradient.swift */; }; - 5A7233F8CD55096485F6137E6278A377 /* UIView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB6EB0A090B3EC667134B3DD24AA2A8 /* UIView+.swift */; }; - 5DD021C2FA893BE6587462DA9A2A44F0 /* Ranking.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E12E3AA69AEC8526DA02450D9F486C31 /* Ranking.storyboard */; }; - 5F74C0FF12D461826448C86A14E4919D /* Top50Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4C312CB6DC58847B1ACBECB8F95A8F /* Top50Cell.swift */; }; - 626DCED8FA52B65C0C03F7D940B556C5 /* SongBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D27FEA1E4484DB3A555B53E4AE9B1D /* SongBSTableViewController.swift */; }; - 6390715145BD10663A5A4D6C352868DF /* RecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDC8CD7AE0EAE20F102844365138098 /* RecordViewController.swift */; }; - 65B837BD248EF75153ED13562E7F5F5F /* VersionResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2731BD8B5A3E3953125EBC4F1ACA6B7 /* VersionResponse.swift */; }; - 6873CA61A5E3DCF9DCE5B8DD11436346 /* Mission.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 58EF41D2CE42F9C421375B5B3CE8D60E /* Mission.storyboard */; }; - 6882E18AB7ED3B44099C1EB2DF316B2C /* SummaryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D3AEF54E1F8CB4F0C230AE0F4A274D /* SummaryCell.swift */; }; - 6A51A5566ED5C9A050238B3B86CDFF28 /* RecordBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101CE93B365835BBA1D7A917C71B524B /* RecordBSTableViewController.swift */; }; - 6AB28858EC6AF5E90E28E90FEB28EB45 /* RecordAllTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBD21C11306FD9C54E163A20FF8FA24 /* RecordAllTableViewController.swift */; }; - 6B55743E37BEBB24B1B5DA326BAC689B /* Init.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D37A25DCDC8B3EE48F56719264861F7 /* Init.storyboard */; }; - 6C3633F6762BD5A374A277D8F7E146FB /* TrophyCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E4592DA185138E2C675A2E63C84920D1 /* TrophyCell.xib */; }; - 6C3977B8B2C1C1172FDBDE5D7054F4DA /* Top506BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C6A7F46818C574348C01D5E9938C60 /* Top506BTableViewController.swift */; }; - 6CC9FF520053253ACB3082AABE34CF0A /* Top505BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F70C1B0BF44B8904203164AE9B8E1B /* Top505BTableViewController.swift */; }; - 6D1619C4051B8073FDAE2D1EE0F28DF1 /* Achievement.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 282674A18512BC1AEFB6CE490A429E5C /* Achievement.storyboard */; }; - 71B5BF74B4D1647C3AA79FC664464F6F /* SearchByRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF1CBDA6DFA6F7DC1C8CFDE819CB27EC /* SearchByRatingView.swift */; }; - 72713E32C8FA38F681A9C4F075A7D08B /* MissionSection.Technika2+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 241BD9807E33EA3CBBF302A35813F5C2 /* MissionSection.Technika2+Gradient.swift */; }; - 74DD787436F4A0E27647E2D3195DD901 /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AF72C1C7A71F43D43589C3E8792F7A9 /* RealmSwift.framework */; }; - 773E3FDD1DEE5F4CB711CDB6039FC8E6 /* GuideSecondCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C214B5C6340C681D687A5837D49CB2 /* GuideSecondCell.swift */; }; - 77A3641A412E2281169BC43A482D1E91 /* AchievementCommentTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07507A73DE0099DC9CFB4ABA9FB0DC0C /* AchievementCommentTableViewController.swift */; }; - 7858348DB87AE1F57E6EDE96DC86385B /* RankingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656538575F3D4D03C665378FB2C6E482 /* RankingViewController.swift */; }; 78989219547DC155E6A2BFB50D1CE084 /* GuideFirstCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48EB4DE7C46CAC769FAD64B4062EA5AC /* GuideFirstCell.swift */; }; - 792780314E46E5949E03C0F5CF357DCD /* SongPortable2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE0B54506B42D2B43A668825784A336 /* SongPortable2TableViewController.swift */; }; - 79411DF6AB24D237EE95FD55E977CAEA /* AchievementGearTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A0CEB91040D7176F26D4F0FDD21D28 /* AchievementGearTableViewController.swift */; }; - 799B139F9BBB3D3D23BDA509C60C29A8 /* SongBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F23F5730F0C449DE84E323068105AB47 /* SongBaseTableViewController.swift */; }; - 79D274160965FE8BA5A394E6C353BA65 /* Ranking5BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A57D6592351D9AD16368506EE4633557 /* Ranking5BTableViewController.swift */; }; - 7B9E2E0FE30E84D6166FBE77C171C8D9 /* SearchByLevelView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 447A6CDF1125075CFA6FF3AA94D38056 /* SearchByLevelView.xib */; }; - 7C37CAC5FB61061C9FCB133E803A0423 /* MissionTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D21A9793161E13A8605689D97FBCC60 /* MissionTechnika2TableViewController.swift */; }; - 7CAA744A443BAA4E21DFFF769BC9A3BF /* NSObject+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90B143CCDE9CB1920C76E56DFB8E619A /* NSObject+.swift */; }; - 7DB048302AB433149E6A95BA48133447 /* TipViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CCF1B33BD4D77BF5650BED697154D2 /* TipViewController.swift */; }; + D56DE493782E270E40CA51D4CDFBBD83 /* GuideFirstCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4145F1EB5D7436740025D90996B48C6B /* GuideFirstCell.xib */; }; + 773E3FDD1DEE5F4CB711CDB6039FC8E6 /* GuideSecondCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C214B5C6340C681D687A5837D49CB2 /* GuideSecondCell.swift */; }; + 7F9C5B8E757967B095FD6904890294BD /* GuideSecondCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ACAACBB2302A38B15286B2F10D57B0D2 /* GuideSecondCell.xib */; }; + A6CF37762CAA065A967E3883E5957CB3 /* GuideThirdCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2C849886AF9CEC2084D57D6610826D0 /* GuideThirdCell.swift */; }; + 8EB9D7D19F3E905E268B6250460CEC96 /* GuideThirdCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 570419DC99D9A09F38A4AC7F521FCA9B /* GuideThirdCell.xib */; }; + CD55E0CB7597D32784C77016C147A6AD /* GuideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93A63669D5CF070426162547AE2374EB /* GuideViewController.swift */; }; + 6B55743E37BEBB24B1B5DA326BAC689B /* Init.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D37A25DCDC8B3EE48F56719264861F7 /* Init.storyboard */; }; 7E0990E3AE966B278DF432343CED2319 /* InitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117BC6C5BE267F11B4EEF031AEA2892E /* InitViewController.swift */; }; - 7F550ED856FEE434A4289AC243725DA2 /* SongCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AC73FB70CC51A8AFAC0050C039CF14 /* SongCell.swift */; }; - 7FADC0241104D5EF1D511F7CB55F58E5 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC86C6F0F8F435FA71C29C5A32617CF /* Utils.swift */; }; + C663E15915C31A522FC58453C8860335 /* LanguageInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9846CC66092E2BF0D2992D65E7468CD /* LanguageInfo.swift */; }; + 9C9BB24EC5E6266278706EC8E1687942 /* LanguageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FEE52510CEADD20DE68A05F791D08EE /* LanguageResponse.swift */; }; + E0045A82AD56B280294AD01E55A8F38A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0FFF8FE8E83D48C24E4B183637AC73A8 /* LaunchScreen.storyboard */; }; + EC915038C96954FF4B4502B9245CF3D0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B30E23955E630DE10DDEE4E073034629 /* Localizable.strings */; }; + 3B9C2AF499E89D2A4B1386181D2E464C /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78D031E416EDBC4C34BC6B3FA0451966 /* MessageUI.framework */; }; + 6873CA61A5E3DCF9DCE5B8DD11436346 /* Mission.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 58EF41D2CE42F9C421375B5B3CE8D60E /* Mission.storyboard */; }; + 07E412854081E98BAA9EC7826338343C /* MissionBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5735B28DC786C25122A478189A9D7A /* MissionBSTableViewController.swift */; }; + 9DCD5A88AE046BE67E43FDE46C8F33C3 /* MissionBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A41D0D4CFC2F1ABFC1D38C42335BAB6C /* MissionBaseTableViewController.swift */; }; 8007E7D37842446EFC1FDF6AFC2639EC /* MissionCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D30DD51658A0E07C8F795B59D8C5A930 /* MissionCETableViewController.swift */; }; + 297DFEEE2C220A5C1F47BAA6F2AC87B7 /* MissionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E6BC6E8EAEFF1FB31DF48435303F350 /* MissionCell.swift */; }; + 2D1AD8A8A5662FEE12F6EED06FD06136 /* MissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F96CA2C329587E39822104CEF6C2C4D /* MissionCell.xib */; }; + 0179E468A4893A10BE09245347B49401 /* MissionDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1D1400F4F8A5579A4BD339D8661CC6 /* MissionDetailViewController.swift */; }; + C901A043E201D80F7AD41DCA311F210F /* MissionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2056D7C4194815BBE52A3F13FAF7125 /* MissionInfo.swift */; }; + 99897C2ED7674E739230DED65BDC06D2 /* MissionLinkDiskTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB4F2D81091EAC8D197F1D737EA41B9 /* MissionLinkDiskTableViewController.swift */; }; 80F2294D348F4A43E2CB8F35028D0423 /* MissionRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1936880A3D30B8BC49B8587F6778EEA /* MissionRespectTableViewController.swift */; }; - 8195A797A997EB11E01BA33CB200032F /* SummaryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC0C1D43DE39EACC238837AEAB67663B /* SummaryCell.xib */; }; - 832BAB1A651DC131F7DD567512C8F754 /* SignInTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48AF305EFDF8EDEE8CE8D136BC9FEEB /* SignInTextField.swift */; }; - 86DEAB8A62F44038DA244F4B864FE1FF /* UIColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC485CCFD9749EE1E561DFAE98EA11C /* UIColor+.swift */; }; - 87EE66478A51CBA1A1A9F26347694685 /* MissionSection.Technika1+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D7A5F0799CF86A96D301D82B8B1090 /* MissionSection.Technika1+Gradient.swift */; }; - 8D428E252225AAE930BF8D945401F018 /* UIAlertController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42BE04F264C300B56C92EE575A854683 /* UIAlertController+.swift */; }; - 8D459E7659B6D367A465BF313930A8FC /* SongCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E566F2224770BCDA7139D3E7C9B1AC34 /* SongCell.xib */; }; - 8DD62325C32CFDD11403EF407197E9A9 /* MissionSection.Respect+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = A09D0FEC3D95CCD8ECE16CBDA7084FFA /* MissionSection.Respect+Gradient.swift */; }; - 8E2577604E640D270C80FBB4295515A7 /* SongResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7267843D0764A20BFC44647A8069076 /* SongResponse.swift */; }; - 8E46243F171B5DE4C8636DE0C7C4BC09 /* Download.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C18E5F5E8BB5540D91968DDECE31869A /* Download.storyboard */; }; - 8FA7CCD9F150E47BC3E960749476A437 /* RecordTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8FDB96924415810F26D8A3D5DCC643 /* RecordTrilogyTableViewController.swift */; }; - 90435DAD8253B6ECD6DBBD877A50DF9F /* RecordRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7A724B52192252A0101E5F2B3DC658 /* RecordRespectTableViewController.swift */; }; - 90AE9C19BBE72AFD47EC3E391B1EAA1A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E683F525A54716C4D6BE56A96EEDCB29 /* Assets.xcassets */; }; 90AF44D559BE00DEB63346B84D141E10 /* MissionResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 356291260ADA8E8A175631818583AAC6 /* MissionResponse.swift */; }; - 93A2A616DC091EC01FE19DF5A8228554 /* SkillLevelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC69B55FC64D7C31A86A33852EAB0AC /* SkillLevelCell.swift */; }; - 94382F584F379628F8CCCEEF51AA8C23 /* CAGradientLayer+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8D863B4192345379FAA072605B014B /* CAGradientLayer+.swift */; }; - 947B12FA1B9BEA069196FA8C3F0A93CC /* RecordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CCC3BF2DFAE7E90D1AB5AE1DDA0283F /* RecordView.xib */; }; - 95234C099163DBDCE9889D08D17289F5 /* SongTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABF4E0839B1BC3BA0A3E14EA1484CB79 /* SongTrilogyTableViewController.swift */; }; - 956AB4AC68AAE08C8B1027E71234A7D6 /* Trophy.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4D08ADAD88BBB07FBB95CF8CD62CB6ED /* Trophy.storyboard */; }; - 986310414206F5E413A447766B2A36D0 /* TrophyInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9703F75E9D1960A0BAA7CFC8240AE541 /* TrophyInfo.swift */; }; - 99897C2ED7674E739230DED65BDC06D2 /* MissionLinkDiskTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB4F2D81091EAC8D197F1D737EA41B9 /* MissionLinkDiskTableViewController.swift */; }; - 9B236D432A2A7BA98EDD93D1231A3AEF /* RecordTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAF7442CCE225037AD440CAED1A2F46 /* RecordTechnika2TableViewController.swift */; }; - 9C5BD16964B01CE4E826C0714E7BFB7C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437358F63E7EFA7C3FA6E22357580622 /* AppDelegate.swift */; }; - 9C9BB24EC5E6266278706EC8E1687942 /* LanguageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FEE52510CEADD20DE68A05F791D08EE /* LanguageResponse.swift */; }; - 9DB272CDB091ACF835E7C0D863D117F8 /* TrophyResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A426486B63E886A1D72A62EC230A4D /* TrophyResponse.swift */; }; - 9DCD5A88AE046BE67E43FDE46C8F33C3 /* MissionBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A41D0D4CFC2F1ABFC1D38C42335BAB6C /* MissionBaseTableViewController.swift */; }; - 9E93FD8E5248FEAC12520317AE75E78F /* Song.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9F70C67599FC388CA2F8CD0D50622CAF /* Song.storyboard */; }; - 9F02A015FDD5629384099D02332F9AF8 /* Rank.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B1BD7EAB31E7E51B602AF90FC5C2AE /* Rank.swift */; }; - 9F424786F18F120DFA3B54AA97CFE58D /* AchievementBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF59229051F5AD6A883EFD1E5A2603E /* AchievementBaseTableViewController.swift */; }; - 9F579ACF8BFC762F49A03A837BCCF7ED /* MissionSection.Trilogy+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59269E3AB75988A25F6D4EF5088A20 /* MissionSection.Trilogy+Gradient.swift */; }; - A1D24F6E660A1AB2EB33616C3EB5E0DE /* SummaryCollectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C6F278314CCBAFC8DD80108CFDC5B48D /* SummaryCollectionCell.xib */; }; - A315E94EE38B5C79959A6DEF81671063 /* RankingBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C9306E0C24359552A85518112EFCC9D /* RankingBaseTableViewController.swift */; }; - A355C78EC61F119CC6EBBA3E16B5AA0A /* PerformanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFC8A42FD9DBB28DB007F737E8557BB7 /* PerformanceViewController.swift */; }; - A368D670D9ECB37DBA7FDF40293DCC9F /* AchievementAllTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D208137CF7035F090957DD52BFD704BC /* AchievementAllTableViewController.swift */; }; - A4341B45A52DE69D373AA8689A6598A8 /* SongTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED82018840FD1A5C9368EF3CB51DB1E /* SongTechnika2TableViewController.swift */; }; - A6CF37762CAA065A967E3883E5957CB3 /* GuideThirdCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2C849886AF9CEC2084D57D6610826D0 /* GuideThirdCell.swift */; }; - A7666C7BFF582CE3D2E5AEFB30A1973A /* RecordBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A646CCC720C494D646FECAB5677C1E21 /* RecordBaseTableViewController.swift */; }; - A85CA7512FCCF5A4CD116BCDCD8795A1 /* AchievementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEEACD594FBA67A330D104F816D4D968 /* AchievementViewController.swift */; }; - A8F637AB2D98571955E28ED50F2EFE00 /* RecordCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2991773C4B90001F83182265FA5298FA /* RecordCell.swift */; }; AC365183A54C207B12519696FFF64C67 /* MissionSection.BS+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BE0A154D3D7E018D76684B281CECD0 /* MissionSection.BS+Gradient.swift */; }; - AD5AD544FF4F2D2C8F1B5317859CF690 /* AchievementCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 623DBE7ABE62C6ED2C6A96D8B561D1BC /* AchievementCell.swift */; }; - B255C1B95D64372EBE20026F66E6F259 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7D4A7210DBE5C6BF5E8E60901CEC24 /* Realm.framework */; }; - B2C7292410B72D6239C9419EFD99F720 /* RecordCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164C0B9C9329B63A84146A68B44211AF /* RecordCETableViewController.swift */; }; - B33FCC0BE699D423F86B0CA60B201E5D /* APIService+Achievement.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE6D08E337A7395C974382D3D49B50ED /* APIService+Achievement.swift */; }; - B49EF0D157083F66A516584A093A9775 /* APIService+Trophy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DFBF524855854CAC775CF09B6A5F92 /* APIService+Trophy.swift */; }; - B4CB2D7CBA623EA489565AB780044FE6 /* AchievementType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8609566688513F20D56F71E8C2A73E /* AchievementType.swift */; }; - B614B0C989214B6E5E0AE3994B6DA84D /* APIService+Tip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EC376E253CB7630E7BAC771AB75FC10 /* APIService+Tip.swift */; }; - B6352BF809F83287D010471DA3CE8ACC /* AchievementNoteTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18449AAA9B8578063135A1485D123683 /* AchievementNoteTableViewController.swift */; }; - B7B47C90D8A004232DF088D28B0EA53D /* TrophyTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2B8192D8437447475180972270F1A2 /* TrophyTechnika1TableViewController.swift */; }; - B87568500EAB59BC53C4C46C7DBDF37C /* RecordTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 394457A6318FCBA35633C05384AA8D50 /* RecordTechnika3TableViewController.swift */; }; - B8B11751AD0B80290C2BD90E08516F00 /* SkillLevelDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0D06706BBF1BDD733B678B932EBBB7D5 /* SkillLevelDetailView.xib */; }; - B8D616ADF20DEC51276762711CE93CFC /* SongCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9C089EAB1BA22820E5EE21E20936E08 /* SongCETableViewController.swift */; }; - BAF7C4779D1D74F482A5C62832C9AF0C /* TrophyCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B09CACDD60C508B1CEBEF21A39E14C /* TrophyCETableViewController.swift */; }; - BE9081C6FD851727989460A4D055C02E /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BBB665B16E2FF2F0BE095960FFA33E /* Assets.swift */; }; + 0380D257C2F539A6344259BF2EFED65A /* MissionSection.CE+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CBAA567778CAD53CB93CE152F92D55 /* MissionSection.CE+Gradient.swift */; }; BEC2CC592CAB4198746262C55D73DBA0 /* MissionSection.LinkDisk+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60EAD4483197E0A753FDD10845C98D09 /* MissionSection.LinkDisk+Gradient.swift */; }; + 8DD62325C32CFDD11403EF407197E9A9 /* MissionSection.Respect+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = A09D0FEC3D95CCD8ECE16CBDA7084FFA /* MissionSection.Respect+Gradient.swift */; }; + 87EE66478A51CBA1A1A9F26347694685 /* MissionSection.Technika1+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D7A5F0799CF86A96D301D82B8B1090 /* MissionSection.Technika1+Gradient.swift */; }; + 72713E32C8FA38F681A9C4F075A7D08B /* MissionSection.Technika2+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 241BD9807E33EA3CBBF302A35813F5C2 /* MissionSection.Technika2+Gradient.swift */; }; + 5A54507509E4E4DC3181C3FCB74FBBC0 /* MissionSection.Technika3+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBF7FCA66B507564BF411BB82D824394 /* MissionSection.Technika3+Gradient.swift */; }; + 9F579ACF8BFC762F49A03A837BCCF7ED /* MissionSection.Trilogy+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59269E3AB75988A25F6D4EF5088A20 /* MissionSection.Trilogy+Gradient.swift */; }; + F551680129D8E83F451174BE5B4DBF5D /* MissionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27FD193AE2FCE3A3F96143D41ADBCC7F /* MissionSection.swift */; }; BEC7D1F3799FA6E0EEDB0980E345F689 /* MissionStageInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78571F88000DB2A377C1A859F5F2B0B /* MissionStageInfo.swift */; }; - C295B902F2B60D1CF3FA2B1334479A65 /* RUButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B229B6B9B7142C2A461D7DEB2A7113 /* RUButton.swift */; }; - C2B828CD011EB99FA479BF670FEE7A4C /* TipInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B397154AED8CE46A5D63ACC715A8F1 /* TipInfo.swift */; }; - C2E8F29F1DC6CE924DC66758994B7356 /* SearchRecordDetailCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D538492B9D665E6049971A842544B8F0 /* SearchRecordDetailCell.xib */; }; - C3551CA001C950C2BABA8E95D6EFAAD6 /* Top50BaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5B6DC44A390FCF7DBF622AADB5833 /* Top50BaseTableViewController.swift */; }; - C49BDBE7974F6333739B639CFBC5DB8A /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091109F5110F4F89963C64B091604CEE /* BaseViewController.swift */; }; - C663E15915C31A522FC58453C8860335 /* LanguageInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9846CC66092E2BF0D2992D65E7468CD /* LanguageInfo.swift */; }; - C67050AEEA3E9FEFEEF6609848CABF49 /* SongButtonInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD93D99DBE3AD0EB3D9A0617867ED07 /* SongButtonInfo.swift */; }; - C6A47F0F5710AAFCEACC3B7D1A30A484 /* TrophyTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F9848262F8DA6D81D931CC8DE5FA0A /* TrophyTrilogyTableViewController.swift */; }; - C7C80996F1B61B44536F73D8F5ECCD34 /* TrophyRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF98B5B953A51AE19F56E640C40E2687 /* TrophyRespectTableViewController.swift */; }; - C86374E3E25A9D8B40E03568CB353DCE /* Upload.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 808F49E6EA3E0B9F118A59BCD1C399A9 /* Upload.storyboard */; }; - C87227AE5F5C14201E4A9A2BFBA6F43C /* RecordInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B238705DEEA8ACF0182DF0BB41B2CB0D /* RecordInfo.swift */; }; - C8ADDE7416A86CE84CD4823CC47833DC /* RecordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D899C6158365DC40A43EFA3FBD53860 /* RecordView.swift */; }; - C901A043E201D80F7AD41DCA311F210F /* MissionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2056D7C4194815BBE52A3F13FAF7125 /* MissionInfo.swift */; }; - CD286290C91049CAB1AC71B914F91DE7 /* SkillLevelDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 494ED1030BF0FF71A1E556B9468CD078 /* SkillLevelDetailViewController.swift */; }; - CD55E0CB7597D32784C77016C147A6AD /* GuideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93A63669D5CF070426162547AE2374EB /* GuideViewController.swift */; }; - CF652EC9A502638F95140E9BBD58327D /* SignIn.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A085D0FCAAED86B5EF798D2FF4C4EE5E /* SignIn.storyboard */; }; - D235F2870A0811AB0EE18B92C23A5E8F /* TrophyLinkDiskTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2852A77D854438A0267E99C8067691 /* TrophyLinkDiskTableViewController.swift */; }; D4F4FB7D6DFADE1F54AEEDDEEE9BF681 /* MissionTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3127AC853734E65CD8EDD6BD1D9AEB68 /* MissionTechnika1TableViewController.swift */; }; - D5BAC3FE4BFE449319B1FF768BEA4DA9 /* UITableViewCell+.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0BA4578D4298BF7ECAD291A9230D5DA /* UITableViewCell+.swift */; }; - D5F72F3C2F85C879DA08951E8E516A4F /* GuideThirdCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 87BC688E45E35568921856EA90F48939 /* GuideThirdCell.xib */; }; - D60684D01227D743425A5926A21FD850 /* RecordResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BE876B3189C89826136B421C811E381 /* RecordResponse.swift */; }; + 7C37CAC5FB61061C9FCB133E803A0423 /* MissionTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D21A9793161E13A8605689D97FBCC60 /* MissionTechnika2TableViewController.swift */; }; + 532E0449B68A85440B2A1E3F2BAF63B4 /* MissionTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1E98FB695B66D5FA11980E8C7618DA /* MissionTechnika3TableViewController.swift */; }; D7D51512AABF833025D3FB78AB1C0C3F /* MissionTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC1C93791BC6091924D5E9BEA314201C /* MissionTrilogyTableViewController.swift */; }; - DA56608DD5FB0DE29D1BF82728E52081 /* VersionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A49DC68ED49BE1C95E3D0C553CB3C0D0 /* VersionInfo.swift */; }; + ED9D59C06C9E0047119BE8AE0BBC1A97 /* MissionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6192054BD8E7E46E36A43659F1D2131A /* MissionViewController.swift */; }; + 7CAA744A443BAA4E21DFFF769BC9A3BF /* NSObject+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90B143CCDE9CB1920C76E56DFB8E619A /* NSObject+.swift */; }; + 2012B0E292AE68661A84F90C15CCB7E2 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66F1F16E4879E82613F8C07E0062B2A /* NetworkManager.swift */; }; + 4FBF2977E66C057D1A9F1F3F19E48E8C /* NicknameResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B34AF7A247BBB042C734DD502A4021B /* NicknameResponse.swift */; }; + 1D5A93ADB7E0551D8265EC21D90E8114 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AF510989C994AF286BAC6EFC98F3D86 /* Note.swift */; }; DC8239DAEF1700D671C8ADC1F04121DA /* OldRecordInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B26CA6823B048ECBE5ED32FB0E8A9AD /* OldRecordInfo.swift */; }; - DF0ADF3EC056D01E0F7C2285EE9C8587 /* UserResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45291D32AD99A8C491E4A69A15AB4D44 /* UserResponse.swift */; }; + FCFE1C1D08C5F261AD3D0C70A4B69522 /* Performance.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 27A75068DE95C7555DB599931ED8AEDE /* Performance.storyboard */; }; + A355C78EC61F119CC6EBBA3E16B5AA0A /* PerformanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFC8A42FD9DBB28DB007F737E8557BB7 /* PerformanceViewController.swift */; }; + B3CE24BE8E899EE8D89D56F5921A42A9 /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42590FD8BDFA7FDB31E81239FE1C5C9D /* Persistence.swift */; }; + 54CB14A1152EBED5F62581A197D9DB51 /* Pods_RespectU.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 720D3E6C26142ACBA59C9F7822C204CC /* Pods_RespectU.framework */; }; + C295B902F2B60D1CF3FA2B1334479A65 /* RUButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B229B6B9B7142C2A461D7DEB2A7113 /* RUButton.swift */; }; + 9F02A015FDD5629384099D02332F9AF8 /* Rank.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B1BD7EAB31E7E51B602AF90FC5C2AE /* Rank.swift */; }; + 5DD021C2FA893BE6587462DA9A2A44F0 /* Ranking.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E12E3AA69AEC8526DA02450D9F486C31 /* Ranking.storyboard */; }; + 48175A5C8370F8ED872DDDAD970867BB /* Ranking4BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9EA4615ADDF5106D45E6C157F9935FE /* Ranking4BTableViewController.swift */; }; + 79D274160965FE8BA5A394E6C353BA65 /* Ranking5BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A57D6592351D9AD16368506EE4633557 /* Ranking5BTableViewController.swift */; }; + EEA6DE9B2B98EA38E69EB963C636C520 /* Ranking6BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8059779D1985F721E78B753EC4D776 /* Ranking6BTableViewController.swift */; }; + 4A98A06417A0097FB957083613E33F09 /* Ranking8BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A61C0A29FAF3BAFDEA230CF7D855312 /* Ranking8BTableViewController.swift */; }; + A315E94EE38B5C79959A6DEF81671063 /* RankingBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C9306E0C24359552A85518112EFCC9D /* RankingBaseTableViewController.swift */; }; DFA7343544B17FDE10800CFA2D95474E /* RankingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6DC6B20F4435BC55F0363155B189EA9 /* RankingCell.swift */; }; - E0045A82AD56B280294AD01E55A8F38A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0FFF8FE8E83D48C24E4B183637AC73A8 /* LaunchScreen.storyboard */; }; - E0837D50A45691DAD8C70F03A3CC15CE /* SongTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AA6BC0369E1C3C4B40AB8BE89DBF5A /* SongTechnika3TableViewController.swift */; }; - E0EDFB525D4882309B4E8E08CC6118CF /* AchievementCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0A55900F26C3996946BE4F93D6DA3621 /* AchievementCell.xib */; }; - E1BA221CFFF61F520AD65F33AA99A1FB /* GuideFirstCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8345DDA3C2BB8226C719046C36C1C125 /* GuideFirstCell.xib */; }; - E1CBFF554215B6EE966299F65FC12C15 /* AchievementInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D72B837CDF13537B08A21962C780D70 /* AchievementInfo.swift */; }; - E2D8AEB2117CBC267BE26D6F4BFA9CB7 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08640281899B112DEB6A0A0A56A169B7 /* String+.swift */; }; - E49C4A33514DB94D1E07267D61B4AF25 /* SongInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296CBA384CF912A9F2429A941DFB482D /* SongInfo.swift */; }; - E63A464BD8F09B2C3DC2B77F582DCF15 /* SkillLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FAFF4A05D2722646FFDB1A59C751CA5 /* SkillLevel.swift */; }; - E89955CBE8C1B9AD6AF1994793683092 /* Top508BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FCD8F7C26C5E1F0B0EBF746748BBBF /* Top508BTableViewController.swift */; }; - E8AC5E159FA0754BC70508BDEDA438B2 /* swiftgen.yml in Resources */ = {isa = PBXBuildFile; fileRef = D8DDC6393F8E75DB389B0B80A6930D30 /* swiftgen.yml */; }; + 9EEC50F04F496B836CC03F7F55E1E041 /* RankingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1BD862D1F9C81B97810DC117707740FB /* RankingCell.xib */; }; + 3ACE06EAF10D0F00AB81B031AFFD4370 /* RankingResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F1B980355224D49337F83B418D77DF9 /* RankingResponse.swift */; }; + 7858348DB87AE1F57E6EDE96DC86385B /* RankingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656538575F3D4D03C665378FB2C6E482 /* RankingViewController.swift */; }; + 409ABEBD1C0ACF153D2726D4203EB120 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7897FFE7C5D2CCD0252A92D83D3A242 /* Reachability.swift */; }; + B255C1B95D64372EBE20026F66E6F259 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7D4A7210DBE5C6BF5E8E60901CEC24 /* Realm.framework */; }; + 74DD787436F4A0E27647E2D3195DD901 /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AF72C1C7A71F43D43589C3E8792F7A9 /* RealmSwift.framework */; }; + 067CB8ADCA8BA53E3AF6B4A7C94E5AB7 /* Record.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D13809AF4354422A199374B3465D8656 /* Record.storyboard */; }; + 6AB28858EC6AF5E90E28E90FEB28EB45 /* RecordAllTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBD21C11306FD9C54E163A20FF8FA24 /* RecordAllTableViewController.swift */; }; + 6A51A5566ED5C9A050238B3B86CDFF28 /* RecordBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101CE93B365835BBA1D7A917C71B524B /* RecordBSTableViewController.swift */; }; + A7666C7BFF582CE3D2E5AEFB30A1973A /* RecordBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A646CCC720C494D646FECAB5677C1E21 /* RecordBaseTableViewController.swift */; }; + 0AD398A653F247BBD797BF1C08117411 /* RecordButtonInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D774173D345CCDC64F1E65BA46CC48A /* RecordButtonInfo.swift */; }; + B2C7292410B72D6239C9419EFD99F720 /* RecordCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164C0B9C9329B63A84146A68B44211AF /* RecordCETableViewController.swift */; }; + A8F637AB2D98571955E28ED50F2EFE00 /* RecordCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2991773C4B90001F83182265FA5298FA /* RecordCell.swift */; }; + 3AF1AB6EF468C285F91398ABBA44F207 /* RecordCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CA9B676C5D60B5CCB2663B17DFB0D19B /* RecordCell.xib */; }; + 02686C509DF00D9696587DEEA60DA1AD /* RecordDifficultyInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE923EF715087FF2BBEAA80043390A02 /* RecordDifficultyInfo.swift */; }; + C87227AE5F5C14201E4A9A2BFBA6F43C /* RecordInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B238705DEEA8ACF0182DF0BB41B2CB0D /* RecordInfo.swift */; }; + 402BA1696265B27378F92C7D0EFE5D9A /* RecordPortable1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7CF5FBE9FE442E18A869E8FFDBB6596 /* RecordPortable1TableViewController.swift */; }; + 26708994E8417D244AFABB1922A65642 /* RecordPortable2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F75FFB849D9280269D8A4130772A059 /* RecordPortable2TableViewController.swift */; }; + 90435DAD8253B6ECD6DBBD877A50DF9F /* RecordRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7A724B52192252A0101E5F2B3DC658 /* RecordRespectTableViewController.swift */; }; + D60684D01227D743425A5926A21FD850 /* RecordResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BE876B3189C89826136B421C811E381 /* RecordResponse.swift */; }; + 09E17333AB311C09221D5BDD854CAAF5 /* RecordTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C86C6C9262E8EB75FB7589033C1F2EC4 /* RecordTechnika1TableViewController.swift */; }; + 9B236D432A2A7BA98EDD93D1231A3AEF /* RecordTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAF7442CCE225037AD440CAED1A2F46 /* RecordTechnika2TableViewController.swift */; }; + B87568500EAB59BC53C4C46C7DBDF37C /* RecordTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 394457A6318FCBA35633C05384AA8D50 /* RecordTechnika3TableViewController.swift */; }; + 8FA7CCD9F150E47BC3E960749476A437 /* RecordTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8FDB96924415810F26D8A3D5DCC643 /* RecordTrilogyTableViewController.swift */; }; + C8ADDE7416A86CE84CD4823CC47833DC /* RecordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D899C6158365DC40A43EFA3FBD53860 /* RecordView.swift */; }; + 7A66BC667B82C33D8645F383FBB76040 /* RecordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A832024764FD1738185268E528614C3A /* RecordView.xib */; }; + 6390715145BD10663A5A4D6C352868DF /* RecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDC8CD7AE0EAE20F102844365138098 /* RecordViewController.swift */; }; + 56B103D4D21450CC4D0BC3D98286A3AF /* SearchByLevelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CA587AC64BBF7D9615B18AE922CCA5 /* SearchByLevelView.swift */; }; + FEDA948775D81128E2E2B3D648FF361D /* SearchByLevelView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 650873B493E00BDFE6552F230602E303 /* SearchByLevelView.xib */; }; + 3FC482296754D98BE86BD7B18E564694 /* SearchByNoteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8DA77CE4436FD7F1B3A85A2993A6875 /* SearchByNoteView.swift */; }; + 5120FF3DED6B29ACE2B63AD182E35A7F /* SearchByNoteView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 65A74FCC87D5D9BBBEBAE0F47B7B68DA /* SearchByNoteView.xib */; }; + D26CDBFA3B71B4DAF56C820443B6C735 /* SearchByRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8205116CE68B6DBD1CE90AC4439DE832 /* SearchByRatingView.swift */; }; + 478698557F1DF8B2F9514DFC1DEBC2C4 /* SearchByRatingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6DD826AB9C764BFEA1BFE277466B01C /* SearchByRatingView.xib */; }; + EA3A243DC605E1721F5A5FECA01218B2 /* SearchRecordDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA2ABF5BEC5BFF80DD120FEE7AC45F14 /* SearchRecordDetail.swift */; }; E909A0D435DE1970F26D9E69E991ED41 /* SearchRecordDetailCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7E6B6B900C98599DF992D190397ED8 /* SearchRecordDetailCell.swift */; }; - EA1752A5D1D32B7E68ED6F87A95DC83F /* Top50Cell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3329CE7FE589A94E7D6F4B0D771A64AE /* Top50Cell.xib */; }; + 3B4823649EB3A4B226BB8675B0D96D34 /* SearchRecordDetailCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E6C14F35B2B1A8D25A221C146D1C063B /* SearchRecordDetailCell.xib */; }; EB500C397294D1867BE4A5323F2B399E /* SearchRecordDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B54A2548B3BB3E75F221CEAFB441651 /* SearchRecordDetailViewController.swift */; }; - EC915038C96954FF4B4502B9245CF3D0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B30E23955E630DE10DDEE4E073034629 /* Localizable.strings */; }; - ED9D59C06C9E0047119BE8AE0BBC1A97 /* MissionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6192054BD8E7E46E36A43659F1D2131A /* MissionViewController.swift */; }; - EDDF63E5EFFCFFE2BAEED87EF03CA87B /* AchievementMusicTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C728DBB0614587CD2759E53BD1A65882 /* AchievementMusicTableViewController.swift */; }; - EE5801B1F86B92BE4282BB1D1EAECC52 /* .swiftlint.yml in Resources */ = {isa = PBXBuildFile; fileRef = DA5A4E6832F2B48BFFE29D6EE9E1BFEF /* .swiftlint.yml */; }; + 15D85A72D8E253A709907E22B1B919BA /* SearchRecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C194554A77881C517795E91A8F23124E /* SearchRecordViewController.swift */; }; + 16217B19735F571D4F00B4E714D445A1 /* Series+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9970140918A7A61332718A9C9D8322 /* Series+UI.swift */; }; + 2440D6183CA2FD2B1771BD07553F0EA3 /* Series.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ADF8D0329CDE33DD67FC75E36D63E92 /* Series.swift */; }; + CF652EC9A502638F95140E9BBD58327D /* SignIn.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A085D0FCAAED86B5EF798D2FF4C4EE5E /* SignIn.storyboard */; }; + 832BAB1A651DC131F7DD567512C8F754 /* SignInTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48AF305EFDF8EDEE8CE8D136BC9FEEB /* SignInTextField.swift */; }; EE71722AABACD4B3CA0F4730F95231FF /* SignInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 423FC743627303AF97314223CD2F8B7B /* SignInViewController.swift */; }; - EEA6DE9B2B98EA38E69EB963C636C520 /* Ranking6BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8059779D1985F721E78B753EC4D776 /* Ranking6BTableViewController.swift */; }; - F2510C6CE3EB733695848E79C13CA0ED /* Top50.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 721D3123DF4906650661109B36D4EFC2 /* Top50.storyboard */; }; - F551680129D8E83F451174BE5B4DBF5D /* MissionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27FD193AE2FCE3A3F96143D41ADBCC7F /* MissionSection.swift */; }; - F5FFD36CB7ABB20DBB14EADA3DF1E89F /* SearchByNoteView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB408736A795C68EBA417CAF1C9391F9 /* SearchByNoteView.xib */; }; - FA269EB89C42EEF82524955630812EA2 /* Tip.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7E1371C9E28AB4CD6449FA7FD0074E25 /* Tip.storyboard */; }; + 40A958056F42EC3D295722454F5129D2 /* SignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D774FFC53CC59564C3B6E8255A6FDE76 /* SignUpViewController.swift */; }; + E63A464BD8F09B2C3DC2B77F582DCF15 /* SkillLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FAFF4A05D2722646FFDB1A59C751CA5 /* SkillLevel.swift */; }; + 93A2A616DC091EC01FE19DF5A8228554 /* SkillLevelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC69B55FC64D7C31A86A33852EAB0AC /* SkillLevelCell.swift */; }; + 2B4E785D2FF0512CDC3572A616A09DEA /* SkillLevelCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0A0189022C6BE4C949EA9505B6B3CA1C /* SkillLevelCell.xib */; }; + 14A9C0F1784C4EFB020D45285772036C /* SkillLevelDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0CC6B551EBD0EC656F35FD74247ED8D /* SkillLevelDetailView.swift */; }; + 84547A3E02B63C2D70B34C9F6602FF6D /* SkillLevelDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 62A4B18F7F37F18F820CB7408C91507F /* SkillLevelDetailView.xib */; }; + CD286290C91049CAB1AC71B914F91DE7 /* SkillLevelDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 494ED1030BF0FF71A1E556B9468CD078 /* SkillLevelDetailViewController.swift */; }; + 1E64D8217B3A29B37418024823592E66 /* SkillPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E664D69C5666D40413DD76EC3EEB905 /* SkillPoint.swift */; }; + 9E93FD8E5248FEAC12520317AE75E78F /* Song.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9F70C67599FC388CA2F8CD0D50622CAF /* Song.storyboard */; }; FA4BEBF3791C502B996D02DE973581D8 /* SongAllTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBDBA54D2C97FB9571C3176FE9BFB0F4 /* SongAllTableViewController.swift */; }; - FB483D4534B0C1A9CB4E62CBBCB678DB /* APIService+Ranking.swift in Sources */ = {isa = PBXBuildFile; fileRef = A52641BDB047E88FFE60B9F1EB7F89D8 /* APIService+Ranking.swift */; }; + 626DCED8FA52B65C0C03F7D940B556C5 /* SongBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D27FEA1E4484DB3A555B53E4AE9B1D /* SongBSTableViewController.swift */; }; + 799B139F9BBB3D3D23BDA509C60C29A8 /* SongBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F23F5730F0C449DE84E323068105AB47 /* SongBaseTableViewController.swift */; }; + C67050AEEA3E9FEFEEF6609848CABF49 /* SongButtonInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD93D99DBE3AD0EB3D9A0617867ED07 /* SongButtonInfo.swift */; }; + B8D616ADF20DEC51276762711CE93CFC /* SongCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9C089EAB1BA22820E5EE21E20936E08 /* SongCETableViewController.swift */; }; + 7F550ED856FEE434A4289AC243725DA2 /* SongCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AC73FB70CC51A8AFAC0050C039CF14 /* SongCell.swift */; }; + 6C452B565623C505DA42D49FFBFA7FB0 /* SongCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDE48D134E382F52D49F7020BDAE3546 /* SongCell.xib */; }; + E49C4A33514DB94D1E07267D61B4AF25 /* SongInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296CBA384CF912A9F2429A941DFB482D /* SongInfo.swift */; }; + 4153853DD9B533CEB5CB57E06BE93625 /* SongPortable1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06634141A9D0AD50CB5CF1C56489B8AB /* SongPortable1TableViewController.swift */; }; + 792780314E46E5949E03C0F5CF357DCD /* SongPortable2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE0B54506B42D2B43A668825784A336 /* SongPortable2TableViewController.swift */; }; + 30370928E902A0A1ADEBB413AFFD9019 /* SongRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A74447C5271E64A723356FA2C76C8 /* SongRespectTableViewController.swift */; }; + 8E2577604E640D270C80FBB4295515A7 /* SongResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7267843D0764A20BFC44647A8069076 /* SongResponse.swift */; }; + 05BF8B1DD9D1CFFE3909352A0062808D /* SongTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ABC647AFC387EECD6791F100EBED31D /* SongTechnika1TableViewController.swift */; }; + A4341B45A52DE69D373AA8689A6598A8 /* SongTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED82018840FD1A5C9368EF3CB51DB1E /* SongTechnika2TableViewController.swift */; }; + E0837D50A45691DAD8C70F03A3CC15CE /* SongTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AA6BC0369E1C3C4B40AB8BE89DBF5A /* SongTechnika3TableViewController.swift */; }; + 95234C099163DBDCE9889D08D17289F5 /* SongTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABF4E0839B1BC3BA0A3E14EA1484CB79 /* SongTrilogyTableViewController.swift */; }; + 4F6670BDD18418EB0BACC4C92FE1EA57 /* SongViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7FF17875A680B2300216805CB27FC73 /* SongViewController.swift */; }; + 4DB514B43FA2A583C16006541624AD81 /* Storyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A21F405F43A9AF49F10051F778F3FA4 /* Storyboard.swift */; }; + E2D8AEB2117CBC267BE26D6F4BFA9CB7 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08640281899B112DEB6A0A0A56A169B7 /* String+.swift */; }; + 59A0935E9841AE2C2D2936507EBD985B /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B7E2EA07502142424EC51FE1C1D182 /* Strings.swift */; }; + 6882E18AB7ED3B44099C1EB2DF316B2C /* SummaryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D3AEF54E1F8CB4F0C230AE0F4A274D /* SummaryCell.swift */; }; + 469E026861D632B5A1E4788F3168F2EE /* SummaryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = EDC63C6945BBA9A7159F95B906AC4F52 /* SummaryCell.xib */; }; + 36D90F14658E9A2386E71925147AD3B7 /* SummaryCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7141F43FD5DD9A34D35E2692CB721D4A /* SummaryCollectionCell.swift */; }; + A9B9CE0F13F59292327D3DDD96BB4C27 /* SummaryCollectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DBBD5EC70A4CB6A25BE54391F562C59F /* SummaryCollectionCell.xib */; }; FBA69F596B504E30711FBB8CA0653F81 /* SummaryDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A1695D071CC7554C3FA877BC12B245 /* SummaryDetailViewController.swift */; }; - FC8FBD22093105C52F038E7D50AE6834 /* GuideSecondCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27B3098AC1D795D61653C34864ED20F9 /* GuideSecondCell.xib */; }; - FCFE1C1D08C5F261AD3D0C70A4B69522 /* Performance.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 27A75068DE95C7555DB599931ED8AEDE /* Performance.storyboard */; }; + FA269EB89C42EEF82524955630812EA2 /* Tip.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7E1371C9E28AB4CD6449FA7FD0074E25 /* Tip.storyboard */; }; + C2B828CD011EB99FA479BF670FEE7A4C /* TipInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B397154AED8CE46A5D63ACC715A8F1 /* TipInfo.swift */; }; FE16B2705772147DFC33EFE0129FDD53 /* TipResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753FD1B3D1EB8456BE034D69FBCBB329 /* TipResponse.swift */; }; + 7DB048302AB433149E6A95BA48133447 /* TipViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CCF1B33BD4D77BF5650BED697154D2 /* TipViewController.swift */; }; + F2510C6CE3EB733695848E79C13CA0ED /* Top50.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 721D3123DF4906650661109B36D4EFC2 /* Top50.storyboard */; }; + 0CEF469A149FF36E867CC3A161165AF9 /* Top504BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB34EF52E48B6B9E32AE64FEDD76C088 /* Top504BTableViewController.swift */; }; + 6CC9FF520053253ACB3082AABE34CF0A /* Top505BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F70C1B0BF44B8904203164AE9B8E1B /* Top505BTableViewController.swift */; }; + 6C3977B8B2C1C1172FDBDE5D7054F4DA /* Top506BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C6A7F46818C574348C01D5E9938C60 /* Top506BTableViewController.swift */; }; + E89955CBE8C1B9AD6AF1994793683092 /* Top508BTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FCD8F7C26C5E1F0B0EBF746748BBBF /* Top508BTableViewController.swift */; }; + C3551CA001C950C2BABA8E95D6EFAAD6 /* Top50BaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5B6DC44A390FCF7DBF622AADB5833 /* Top50BaseTableViewController.swift */; }; + 5F74C0FF12D461826448C86A14E4919D /* Top50Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4C312CB6DC58847B1ACBECB8F95A8F /* Top50Cell.swift */; }; + F1041F8EA1D2FF11AEB9C969E7201130 /* Top50Cell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1907607DB6FA22EE22397D314C25E2C6 /* Top50Cell.xib */; }; + 3B7DE92472A1872F8D09E85383AE7E95 /* Top50ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365A3C9BFD2062AA5D08B56E995F9474 /* Top50ViewController.swift */; }; + 956AB4AC68AAE08C8B1027E71234A7D6 /* Trophy.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4D08ADAD88BBB07FBB95CF8CD62CB6ED /* Trophy.storyboard */; }; + 1C4D888E2BECAA7E7447EC6E493D700E /* TrophyBSTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C2415AABC509E942301DF3589F55F8 /* TrophyBSTableViewController.swift */; }; + 554C372C44FEB3224C5EAE6E722D3D2B /* TrophyBaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C865E14A01D3C67FEEE5EAF375899C7D /* TrophyBaseTableViewController.swift */; }; + BAF7C4779D1D74F482A5C62832C9AF0C /* TrophyCETableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B09CACDD60C508B1CEBEF21A39E14C /* TrophyCETableViewController.swift */; }; + 456CFC7E84339AD858F72E14C0200EAD /* TrophyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C8E87A2B03543FCDFA459E10DCEBCDF /* TrophyCell.swift */; }; + 63AA7EFC9C52C567308AC665EB07E0E4 /* TrophyCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F3C75B35A37617F2B6A9DD8208FE2AD9 /* TrophyCell.xib */; }; + 3B5CCA1F7AE3B3E186DCDC5466618711 /* TrophyGrade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4298E98CCC40A6C7EFDE5510CEDED521 /* TrophyGrade.swift */; }; + 986310414206F5E413A447766B2A36D0 /* TrophyInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9703F75E9D1960A0BAA7CFC8240AE541 /* TrophyInfo.swift */; }; + D235F2870A0811AB0EE18B92C23A5E8F /* TrophyLinkDiskTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2852A77D854438A0267E99C8067691 /* TrophyLinkDiskTableViewController.swift */; }; + C7C80996F1B61B44536F73D8F5ECCD34 /* TrophyRespectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF98B5B953A51AE19F56E640C40E2687 /* TrophyRespectTableViewController.swift */; }; + 9DB272CDB091ACF835E7C0D863D117F8 /* TrophyResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A426486B63E886A1D72A62EC230A4D /* TrophyResponse.swift */; }; + B7B47C90D8A004232DF088D28B0EA53D /* TrophyTechnika1TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2B8192D8437447475180972270F1A2 /* TrophyTechnika1TableViewController.swift */; }; + 4AE97EBF1348A5516BE27E7EB403CE28 /* TrophyTechnika2TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DDBE69BDF91490724A4508E8150A75F /* TrophyTechnika2TableViewController.swift */; }; + 1722D64EEA474AA4DB6530A17DA20635 /* TrophyTechnika3TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A875376A5EBE583D9D47E2CCA367EB4F /* TrophyTechnika3TableViewController.swift */; }; + C6A47F0F5710AAFCEACC3B7D1A30A484 /* TrophyTrilogyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F9848262F8DA6D81D931CC8DE5FA0A /* TrophyTrilogyTableViewController.swift */; }; + 57A9D23286BDA314BEC501224189EFE7 /* TrophyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A0585B9094D54EA2EE91A30C6265FA /* TrophyViewController.swift */; }; + 8D428E252225AAE930BF8D945401F018 /* UIAlertController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42BE04F264C300B56C92EE575A854683 /* UIAlertController+.swift */; }; + 86DEAB8A62F44038DA244F4B864FE1FF /* UIColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC485CCFD9749EE1E561DFAE98EA11C /* UIColor+.swift */; }; + D5BAC3FE4BFE449319B1FF768BEA4DA9 /* UITableViewCell+.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0BA4578D4298BF7ECAD291A9230D5DA /* UITableViewCell+.swift */; }; + 5A7233F8CD55096485F6137E6278A377 /* UIView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB6EB0A090B3EC667134B3DD24AA2A8 /* UIView+.swift */; }; + 4CB993740AF398D71E90C9EC481F995D /* UIViewController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0933C1D68D4630ABCB0E824F3B06E6FA /* UIViewController+.swift */; }; + C86374E3E25A9D8B40E03568CB353DCE /* Upload.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 808F49E6EA3E0B9F118A59BCD1C399A9 /* Upload.storyboard */; }; + 3C2E4343DB314444E72BCA528356A02B /* UploadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04A91E1391EB1A2505BB6E30EB1AD65 /* UploadViewController.swift */; }; + DF0ADF3EC056D01E0F7C2285EE9C8587 /* UserResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45291D32AD99A8C491E4A69A15AB4D44 /* UserResponse.swift */; }; + 7FADC0241104D5EF1D511F7CB55F58E5 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC86C6F0F8F435FA71C29C5A32617CF /* Utils.swift */; }; + DA56608DD5FB0DE29D1BF82728E52081 /* VersionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A49DC68ED49BE1C95E3D0C553CB3C0D0 /* VersionInfo.swift */; }; + 65B837BD248EF75153ED13562E7F5F5F /* VersionResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2731BD8B5A3E3953125EBC4F1ACA6B7 /* VersionResponse.swift */; }; + E8AC5E159FA0754BC70508BDEDA438B2 /* swiftgen.yml in Resources */ = {isa = PBXBuildFile; fileRef = D8DDC6393F8E75DB389B0B80A6930D30 /* swiftgen.yml */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -236,224 +236,224 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 00C0A70ADF02A515C554A2A7F65D04D0 /* Double+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+.swift"; sourceTree = ""; }; - 06634141A9D0AD50CB5CF1C56489B8AB /* SongPortable1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongPortable1TableViewController.swift; sourceTree = ""; }; - 07507A73DE0099DC9CFB4ABA9FB0DC0C /* AchievementCommentTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementCommentTableViewController.swift; sourceTree = ""; }; - 08640281899B112DEB6A0A0A56A169B7 /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = ""; }; - 08F04BA7E15EC807F3B9CAA3AEF98239 /* AchievementPlateTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementPlateTableViewController.swift; sourceTree = ""; }; - 091109F5110F4F89963C64B091604CEE /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; - 0933C1D68D4630ABCB0E824F3B06E6FA /* UIViewController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+.swift"; sourceTree = ""; }; - 0A21F405F43A9AF49F10051F778F3FA4 /* Storyboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Storyboard.swift; sourceTree = ""; }; - 0A55900F26C3996946BE4F93D6DA3621 /* AchievementCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AchievementCell.xib; sourceTree = ""; }; - 0A7A724B52192252A0101E5F2B3DC658 /* RecordRespectTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordRespectTableViewController.swift; sourceTree = ""; }; - 0D06706BBF1BDD733B678B932EBBB7D5 /* SkillLevelDetailView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SkillLevelDetailView.xib; sourceTree = ""; }; - 0E664D69C5666D40413DD76EC3EEB905 /* SkillPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillPoint.swift; sourceTree = ""; }; - 0F1B980355224D49337F83B418D77DF9 /* RankingResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingResponse.swift; sourceTree = ""; }; - 101CE93B365835BBA1D7A917C71B524B /* RecordBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordBSTableViewController.swift; sourceTree = ""; }; - 117BC6C5BE267F11B4EEF031AEA2892E /* InitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitViewController.swift; sourceTree = ""; }; - 164C0B9C9329B63A84146A68B44211AF /* RecordCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordCETableViewController.swift; sourceTree = ""; }; - 16CA587AC64BBF7D9615B18AE922CCA5 /* SearchByLevelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchByLevelView.swift; sourceTree = ""; }; - 181F3BF12F13DC015494221C8902B980 /* AchievementResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementResponse.swift; sourceTree = ""; }; - 18449AAA9B8578063135A1485D123683 /* AchievementNoteTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementNoteTableViewController.swift; sourceTree = ""; }; - 1914B51D2236B3E500BA057E /* SearchRecordDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordDetail.swift; sourceTree = ""; }; - 1914B51F223805BD00BA057E /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = ""; }; - 1B070570A49E0EE97FB9D7A7BEE9915B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + DA5A4E6832F2B48BFFE29D6EE9E1BFEF /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .swiftlint.yml; sourceTree = ""; }; + EE6D08E337A7395C974382D3D49B50ED /* APIService+Achievement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Achievement.swift"; sourceTree = ""; }; + F14D88E672A1CA362BBF23009477E7C7 /* APIService+Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Base.swift"; sourceTree = ""; }; + 67F8ADF69CF51420637315B6B1CB9B3F /* APIService+Mission.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Mission.swift"; sourceTree = ""; }; + A52641BDB047E88FFE60B9F1EB7F89D8 /* APIService+Ranking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Ranking.swift"; sourceTree = ""; }; + B6594C9F6573B04AED144F6F3F3B9AA6 /* APIService+Record.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Record.swift"; sourceTree = ""; }; + AF131ED7C45FABB6AD6B1A75998373F8 /* APIService+Song.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Song.swift"; sourceTree = ""; }; 1EC376E253CB7630E7BAC771AB75FC10 /* APIService+Tip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Tip.swift"; sourceTree = ""; }; - 1FD55BA517A60A14D8EC54ACB1C7B9D4 /* Pods-RespectU.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RespectU.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RespectU/Pods-RespectU.debug.xcconfig"; sourceTree = ""; }; - 241BD9807E33EA3CBBF302A35813F5C2 /* MissionSection.Technika2+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Technika2+Gradient.swift"; sourceTree = ""; }; - 26A426486B63E886A1D72A62EC230A4D /* TrophyResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyResponse.swift; sourceTree = ""; }; - 274D0B448B5CE4F3F072A2E8F1A08173 /* MissionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MissionCell.xib; sourceTree = ""; }; - 27A75068DE95C7555DB599931ED8AEDE /* Performance.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Performance.storyboard; sourceTree = ""; }; - 27B3098AC1D795D61653C34864ED20F9 /* GuideSecondCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideSecondCell.xib; sourceTree = ""; }; - 27FD193AE2FCE3A3F96143D41ADBCC7F /* MissionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionSection.swift; sourceTree = ""; }; - 282674A18512BC1AEFB6CE490A429E5C /* Achievement.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Achievement.storyboard; sourceTree = ""; }; - 296CBA384CF912A9F2429A941DFB482D /* SongInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SongInfo.swift; sourceTree = ""; }; - 2991773C4B90001F83182265FA5298FA /* RecordCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordCell.swift; sourceTree = ""; }; - 2A61C0A29FAF3BAFDEA230CF7D855312 /* Ranking8BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking8BTableViewController.swift; sourceTree = ""; }; - 2AC69B55FC64D7C31A86A33852EAB0AC /* SkillLevelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevelCell.swift; sourceTree = ""; }; - 2D5735B28DC786C25122A478189A9D7A /* MissionBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionBSTableViewController.swift; sourceTree = ""; }; - 2FC485CCFD9749EE1E561DFAE98EA11C /* UIColor+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+.swift"; sourceTree = ""; }; - 3127AC853734E65CD8EDD6BD1D9AEB68 /* MissionTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTechnika1TableViewController.swift; sourceTree = ""; }; - 3329CE7FE589A94E7D6F4B0D771A64AE /* Top50Cell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Top50Cell.xib; sourceTree = ""; }; - 3556AE9C2F4DBEEEF2277634864736F6 /* Difficulty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Difficulty.swift; sourceTree = ""; }; - 356291260ADA8E8A175631818583AAC6 /* MissionResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionResponse.swift; sourceTree = ""; }; - 365A3C9BFD2062AA5D08B56E995F9474 /* Top50ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top50ViewController.swift; sourceTree = ""; }; - 394457A6318FCBA35633C05384AA8D50 /* RecordTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTechnika3TableViewController.swift; sourceTree = ""; }; - 3C9306E0C24359552A85518112EFCC9D /* RankingBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingBaseTableViewController.swift; sourceTree = ""; }; - 3FAFF4A05D2722646FFDB1A59C751CA5 /* SkillLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevel.swift; sourceTree = ""; }; - 40F9848262F8DA6D81D931CC8DE5FA0A /* TrophyTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTrilogyTableViewController.swift; sourceTree = ""; }; - 423FC743627303AF97314223CD2F8B7B /* SignInViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInViewController.swift; sourceTree = ""; }; - 4298E98CCC40A6C7EFDE5510CEDED521 /* TrophyGrade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyGrade.swift; sourceTree = ""; }; - 42BE04F264C300B56C92EE575A854683 /* UIAlertController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIAlertController+.swift"; sourceTree = ""; }; - 437358F63E7EFA7C3FA6E22357580622 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 43CCCFC971513264AFA7256BA71653C4 /* Guide.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Guide.storyboard; sourceTree = ""; }; - 447A6CDF1125075CFA6FF3AA94D38056 /* SearchByLevelView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchByLevelView.xib; sourceTree = ""; }; - 45291D32AD99A8C491E4A69A15AB4D44 /* UserResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserResponse.swift; sourceTree = ""; }; - 48EB4DE7C46CAC769FAD64B4062EA5AC /* GuideFirstCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideFirstCell.swift; sourceTree = ""; }; - 493FFC326138371B1937E2E2D26236EA /* RespectU.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RespectU.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 494ED1030BF0FF71A1E556B9468CD078 /* SkillLevelDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevelDetailViewController.swift; sourceTree = ""; }; - 4A4C312CB6DC58847B1ACBECB8F95A8F /* Top50Cell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top50Cell.swift; sourceTree = ""; }; - 4B54A2548B3BB3E75F221CEAFB441651 /* SearchRecordDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordDetailViewController.swift; sourceTree = ""; }; - 4BBD21C11306FD9C54E163A20FF8FA24 /* RecordAllTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordAllTableViewController.swift; sourceTree = ""; }; - 4CAF7442CCE225037AD440CAED1A2F46 /* RecordTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTechnika2TableViewController.swift; sourceTree = ""; }; - 4D08ADAD88BBB07FBB95CF8CD62CB6ED /* Trophy.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Trophy.storyboard; sourceTree = ""; }; - 4D284F23A18D9152EF2B5160B985146D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4DB6EB0A090B3EC667134B3DD24AA2A8 /* UIView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+.swift"; sourceTree = ""; }; - 54A0585B9094D54EA2EE91A30C6265FA /* TrophyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyViewController.swift; sourceTree = ""; }; - 56193FB5ED1B44771800EF26128FEE44 /* Pods-RespectU.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RespectU.release.xcconfig"; path = "Pods/Target Support Files/Pods-RespectU/Pods-RespectU.release.xcconfig"; sourceTree = ""; }; - 58EF41D2CE42F9C421375B5B3CE8D60E /* Mission.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Mission.storyboard; sourceTree = ""; }; - 58F94B11D0652E774E5A75E6FC9875E3 /* SkillLevelCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SkillLevelCell.xib; sourceTree = ""; }; - 59AA6BC0369E1C3C4B40AB8BE89DBF5A /* SongTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTechnika3TableViewController.swift; sourceTree = ""; }; - 59AC73FB70CC51A8AFAC0050C039CF14 /* SongCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongCell.swift; sourceTree = ""; }; - 5AF72C1C7A71F43D43589C3E8792F7A9 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B34AF7A247BBB042C734DD502A4021B /* NicknameResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NicknameResponse.swift; sourceTree = ""; }; + C0DFBF524855854CAC775CF09B6A5F92 /* APIService+Trophy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Trophy.swift"; sourceTree = ""; }; 5B53CFCFD9ABD97DDA14CD35ACDFB94D /* APIService+User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+User.swift"; sourceTree = ""; }; - 5C7E6B6B900C98599DF992D190397ED8 /* SearchRecordDetailCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordDetailCell.swift; sourceTree = ""; }; - 5E6BC6E8EAEFF1FB31DF48435303F350 /* MissionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionCell.swift; sourceTree = ""; }; - 5EB4F2D81091EAC8D197F1D737EA41B9 /* MissionLinkDiskTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionLinkDiskTableViewController.swift; sourceTree = ""; }; - 5F75FFB849D9280269D8A4130772A059 /* RecordPortable2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordPortable2TableViewController.swift; sourceTree = ""; }; - 60EAD4483197E0A753FDD10845C98D09 /* MissionSection.LinkDisk+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.LinkDisk+Gradient.swift"; sourceTree = ""; }; - 6192054BD8E7E46E36A43659F1D2131A /* MissionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionViewController.swift; sourceTree = ""; }; + 282674A18512BC1AEFB6CE490A429E5C /* Achievement.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Achievement.storyboard; sourceTree = ""; }; + D208137CF7035F090957DD52BFD704BC /* AchievementAllTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementAllTableViewController.swift; sourceTree = ""; }; + ECF59229051F5AD6A883EFD1E5A2603E /* AchievementBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementBaseTableViewController.swift; sourceTree = ""; }; 623DBE7ABE62C6ED2C6A96D8B561D1BC /* AchievementCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementCell.swift; sourceTree = ""; }; - 656538575F3D4D03C665378FB2C6E482 /* RankingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingViewController.swift; sourceTree = ""; }; - 67B09CACDD60C508B1CEBEF21A39E14C /* TrophyCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyCETableViewController.swift; sourceTree = ""; }; - 67F8ADF69CF51420637315B6B1CB9B3F /* APIService+Mission.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Mission.swift"; sourceTree = ""; }; - 6B59269E3AB75988A25F6D4EF5088A20 /* MissionSection.Trilogy+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Trilogy+Gradient.swift"; sourceTree = ""; }; - 6CDC8CD7AE0EAE20F102844365138098 /* RecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordViewController.swift; sourceTree = ""; }; + F957C9D0578879C4BFDF188CC7E9DB68 /* AchievementCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AchievementCell.xib; sourceTree = ""; }; + 07507A73DE0099DC9CFB4ABA9FB0DC0C /* AchievementCommentTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementCommentTableViewController.swift; sourceTree = ""; }; + 8CB2A66DC82F6391EEEF838491861F33 /* AchievementGalleryTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementGalleryTableViewController.swift; sourceTree = ""; }; + 81A0CEB91040D7176F26D4F0FDD21D28 /* AchievementGearTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementGearTableViewController.swift; sourceTree = ""; }; 6D72B837CDF13537B08A21962C780D70 /* AchievementInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AchievementInfo.swift; sourceTree = ""; }; - 6D899C6158365DC40A43EFA3FBD53860 /* RecordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordView.swift; sourceTree = ""; }; + C728DBB0614587CD2759E53BD1A65882 /* AchievementMusicTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementMusicTableViewController.swift; sourceTree = ""; }; + 18449AAA9B8578063135A1485D123683 /* AchievementNoteTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementNoteTableViewController.swift; sourceTree = ""; }; + 08F04BA7E15EC807F3B9CAA3AEF98239 /* AchievementPlateTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementPlateTableViewController.swift; sourceTree = ""; }; + 181F3BF12F13DC015494221C8902B980 /* AchievementResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementResponse.swift; sourceTree = ""; }; 6E8609566688513F20D56F71E8C2A73E /* AchievementType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementType.swift; sourceTree = ""; }; - 6F8D863B4192345379FAA072605B014B /* CAGradientLayer+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CAGradientLayer+.swift"; sourceTree = ""; }; - 70FCD8F7C26C5E1F0B0EBF746748BBBF /* Top508BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top508BTableViewController.swift; sourceTree = ""; }; - 7141F43FD5DD9A34D35E2692CB721D4A /* SummaryCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryCollectionCell.swift; sourceTree = ""; }; - 720D3E6C26142ACBA59C9F7822C204CC /* Pods_RespectU.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RespectU.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 721D3123DF4906650661109B36D4EFC2 /* Top50.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Top50.storyboard; sourceTree = ""; }; + AEEACD594FBA67A330D104F816D4D968 /* AchievementViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementViewController.swift; sourceTree = ""; }; + 437358F63E7EFA7C3FA6E22357580622 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 74BBB665B16E2FF2F0BE095960FFA33E /* Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Assets.swift; sourceTree = ""; }; - 753FD1B3D1EB8456BE034D69FBCBB329 /* TipResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipResponse.swift; sourceTree = ""; }; + E683F525A54716C4D6BE56A96EEDCB29 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 92BBB8BD0C86813D3C7E2DF1A3C1A920 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 091109F5110F4F89963C64B091604CEE /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; + 7994394D253D83388739913632BF52F4 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; + 6F8D863B4192345379FAA072605B014B /* CAGradientLayer+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CAGradientLayer+.swift"; sourceTree = ""; }; + 3556AE9C2F4DBEEEF2277634864736F6 /* Difficulty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Difficulty.swift; sourceTree = ""; }; + 00C0A70ADF02A515C554A2A7F65D04D0 /* Double+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+.swift"; sourceTree = ""; }; + C18E5F5E8BB5540D91968DDECE31869A /* Download.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Download.storyboard; sourceTree = ""; }; 7684A5E7EAE2568B15BCA4F2AEF65CA2 /* DownloadViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadViewController.swift; sourceTree = ""; }; + 9CB2C96445D032E82864C978003715B1 /* GradientDirection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientDirection.swift; sourceTree = ""; }; + 43CCCFC971513264AFA7256BA71653C4 /* Guide.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Guide.storyboard; sourceTree = ""; }; + 48EB4DE7C46CAC769FAD64B4062EA5AC /* GuideFirstCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideFirstCell.swift; sourceTree = ""; }; + 4145F1EB5D7436740025D90996B48C6B /* GuideFirstCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideFirstCell.xib; sourceTree = ""; }; + 88C214B5C6340C681D687A5837D49CB2 /* GuideSecondCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideSecondCell.swift; sourceTree = ""; }; + ACAACBB2302A38B15286B2F10D57B0D2 /* GuideSecondCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideSecondCell.xib; sourceTree = ""; }; + C2C849886AF9CEC2084D57D6610826D0 /* GuideThirdCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideThirdCell.swift; sourceTree = ""; }; + 570419DC99D9A09F38A4AC7F521FCA9B /* GuideThirdCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideThirdCell.xib; sourceTree = ""; }; + 93A63669D5CF070426162547AE2374EB /* GuideViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideViewController.swift; sourceTree = ""; }; + 4D284F23A18D9152EF2B5160B985146D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8D37A25DCDC8B3EE48F56719264861F7 /* Init.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Init.storyboard; sourceTree = ""; }; + 117BC6C5BE267F11B4EEF031AEA2892E /* InitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitViewController.swift; sourceTree = ""; }; + C9846CC66092E2BF0D2992D65E7468CD /* LanguageInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageInfo.swift; sourceTree = ""; }; + 9FEE52510CEADD20DE68A05F791D08EE /* LanguageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageResponse.swift; sourceTree = ""; }; 78D031E416EDBC4C34BC6B3FA0451966 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; - 7994394D253D83388739913632BF52F4 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; + 58EF41D2CE42F9C421375B5B3CE8D60E /* Mission.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Mission.storyboard; sourceTree = ""; }; + 2D5735B28DC786C25122A478189A9D7A /* MissionBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionBSTableViewController.swift; sourceTree = ""; }; + A41D0D4CFC2F1ABFC1D38C42335BAB6C /* MissionBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionBaseTableViewController.swift; sourceTree = ""; }; + D30DD51658A0E07C8F795B59D8C5A930 /* MissionCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionCETableViewController.swift; sourceTree = ""; }; + 5E6BC6E8EAEFF1FB31DF48435303F350 /* MissionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionCell.swift; sourceTree = ""; }; + 6F96CA2C329587E39822104CEF6C2C4D /* MissionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MissionCell.xib; sourceTree = ""; }; + FB1D1400F4F8A5579A4BD339D8661CC6 /* MissionDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionDetailViewController.swift; sourceTree = ""; }; + E2056D7C4194815BBE52A3F13FAF7125 /* MissionInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MissionInfo.swift; sourceTree = ""; }; + 5EB4F2D81091EAC8D197F1D737EA41B9 /* MissionLinkDiskTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionLinkDiskTableViewController.swift; sourceTree = ""; }; + D1936880A3D30B8BC49B8587F6778EEA /* MissionRespectTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionRespectTableViewController.swift; sourceTree = ""; }; + 356291260ADA8E8A175631818583AAC6 /* MissionResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionResponse.swift; sourceTree = ""; }; + A9BE0A154D3D7E018D76684B281CECD0 /* MissionSection.BS+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.BS+Gradient.swift"; sourceTree = ""; }; + 91CBAA567778CAD53CB93CE152F92D55 /* MissionSection.CE+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.CE+Gradient.swift"; sourceTree = ""; }; + 60EAD4483197E0A753FDD10845C98D09 /* MissionSection.LinkDisk+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.LinkDisk+Gradient.swift"; sourceTree = ""; }; + A09D0FEC3D95CCD8ECE16CBDA7084FFA /* MissionSection.Respect+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Respect+Gradient.swift"; sourceTree = ""; }; 79D7A5F0799CF86A96D301D82B8B1090 /* MissionSection.Technika1+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Technika1+Gradient.swift"; sourceTree = ""; }; - 7B26CA6823B048ECBE5ED32FB0E8A9AD /* OldRecordInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OldRecordInfo.swift; sourceTree = ""; }; - 7C2B8192D8437447475180972270F1A2 /* TrophyTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTechnika1TableViewController.swift; sourceTree = ""; }; - 7C8E87A2B03543FCDFA459E10DCEBCDF /* TrophyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyCell.swift; sourceTree = ""; }; - 7D774173D345CCDC64F1E65BA46CC48A /* RecordButtonInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordButtonInfo.swift; sourceTree = ""; }; - 7E1371C9E28AB4CD6449FA7FD0074E25 /* Tip.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Tip.storyboard; sourceTree = ""; }; + 241BD9807E33EA3CBBF302A35813F5C2 /* MissionSection.Technika2+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Technika2+Gradient.swift"; sourceTree = ""; }; + FBF7FCA66B507564BF411BB82D824394 /* MissionSection.Technika3+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Technika3+Gradient.swift"; sourceTree = ""; }; + 6B59269E3AB75988A25F6D4EF5088A20 /* MissionSection.Trilogy+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Trilogy+Gradient.swift"; sourceTree = ""; }; + 27FD193AE2FCE3A3F96143D41ADBCC7F /* MissionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionSection.swift; sourceTree = ""; }; + D78571F88000DB2A377C1A859F5F2B0B /* MissionStageInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MissionStageInfo.swift; sourceTree = ""; }; + 3127AC853734E65CD8EDD6BD1D9AEB68 /* MissionTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTechnika1TableViewController.swift; sourceTree = ""; }; + 9D21A9793161E13A8605689D97FBCC60 /* MissionTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTechnika2TableViewController.swift; sourceTree = ""; }; 7E1E98FB695B66D5FA11980E8C7618DA /* MissionTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTechnika3TableViewController.swift; sourceTree = ""; }; - 808F49E6EA3E0B9F118A59BCD1C399A9 /* Upload.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Upload.storyboard; sourceTree = ""; }; - 81A0CEB91040D7176F26D4F0FDD21D28 /* AchievementGearTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementGearTableViewController.swift; sourceTree = ""; }; - 8345DDA3C2BB8226C719046C36C1C125 /* GuideFirstCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideFirstCell.xib; sourceTree = ""; }; - 87BC688E45E35568921856EA90F48939 /* GuideThirdCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideThirdCell.xib; sourceTree = ""; }; - 8872346BBBB0B7BAFD7D7D14AB637E94 /* RecordCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RecordCell.xib; sourceTree = ""; }; - 88C214B5C6340C681D687A5837D49CB2 /* GuideSecondCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideSecondCell.swift; sourceTree = ""; }; - 8ABC647AFC387EECD6791F100EBED31D /* SongTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTechnika1TableViewController.swift; sourceTree = ""; }; - 8BE876B3189C89826136B421C811E381 /* RecordResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordResponse.swift; sourceTree = ""; }; - 8CB2A66DC82F6391EEEF838491861F33 /* AchievementGalleryTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementGalleryTableViewController.swift; sourceTree = ""; }; - 8D37A25DCDC8B3EE48F56719264861F7 /* Init.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Init.storyboard; sourceTree = ""; }; + DC1C93791BC6091924D5E9BEA314201C /* MissionTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTrilogyTableViewController.swift; sourceTree = ""; }; + 6192054BD8E7E46E36A43659F1D2131A /* MissionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionViewController.swift; sourceTree = ""; }; 90B143CCDE9CB1920C76E56DFB8E619A /* NSObject+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSObject+.swift"; sourceTree = ""; }; - 9143E2A18693E399D37E0F432BB4A9A7 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/LaunchScreen.strings; sourceTree = ""; }; - 91CBAA567778CAD53CB93CE152F92D55 /* MissionSection.CE+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.CE+Gradient.swift"; sourceTree = ""; }; - 91CCF1B33BD4D77BF5650BED697154D2 /* TipViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipViewController.swift; sourceTree = ""; }; - 92BBB8BD0C86813D3C7E2DF1A3C1A920 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 93A63669D5CF070426162547AE2374EB /* GuideViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideViewController.swift; sourceTree = ""; }; - 9703F75E9D1960A0BAA7CFC8240AE541 /* TrophyInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrophyInfo.swift; sourceTree = ""; }; - 9A9970140918A7A61332718A9C9D8322 /* Series+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Series+UI.swift"; sourceTree = ""; }; - 9ADF8D0329CDE33DD67FC75E36D63E92 /* Series.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Series.swift; sourceTree = ""; }; + F66F1F16E4879E82613F8C07E0062B2A /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; + 5B34AF7A247BBB042C734DD502A4021B /* NicknameResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NicknameResponse.swift; sourceTree = ""; }; 9AF510989C994AF286BAC6EFC98F3D86 /* Note.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Note.swift; sourceTree = ""; }; - 9CB2C96445D032E82864C978003715B1 /* GradientDirection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientDirection.swift; sourceTree = ""; }; - 9CCC3BF2DFAE7E90D1AB5AE1DDA0283F /* RecordView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RecordView.xib; sourceTree = ""; }; - 9D21A9793161E13A8605689D97FBCC60 /* MissionTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTechnika2TableViewController.swift; sourceTree = ""; }; - 9DDBE69BDF91490724A4508E8150A75F /* TrophyTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTechnika2TableViewController.swift; sourceTree = ""; }; - 9F70C67599FC388CA2F8CD0D50622CAF /* Song.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Song.storyboard; sourceTree = ""; }; - 9FEE52510CEADD20DE68A05F791D08EE /* LanguageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageResponse.swift; sourceTree = ""; }; - A085D0FCAAED86B5EF798D2FF4C4EE5E /* SignIn.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SignIn.storyboard; sourceTree = ""; }; - A09D0FEC3D95CCD8ECE16CBDA7084FFA /* MissionSection.Respect+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Respect+Gradient.swift"; sourceTree = ""; }; - A2D27FEA1E4484DB3A555B53E4AE9B1D /* SongBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongBSTableViewController.swift; sourceTree = ""; }; - A41D0D4CFC2F1ABFC1D38C42335BAB6C /* MissionBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionBaseTableViewController.swift; sourceTree = ""; }; - A49DC68ED49BE1C95E3D0C553CB3C0D0 /* VersionInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionInfo.swift; sourceTree = ""; }; + 7B26CA6823B048ECBE5ED32FB0E8A9AD /* OldRecordInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OldRecordInfo.swift; sourceTree = ""; }; + 27A75068DE95C7555DB599931ED8AEDE /* Performance.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Performance.storyboard; sourceTree = ""; }; + AFC8A42FD9DBB28DB007F737E8557BB7 /* PerformanceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceViewController.swift; sourceTree = ""; }; + 42590FD8BDFA7FDB31E81239FE1C5C9D /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = ""; }; + 1FD55BA517A60A14D8EC54ACB1C7B9D4 /* Pods-RespectU.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RespectU.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RespectU/Pods-RespectU.debug.xcconfig"; sourceTree = ""; }; + 56193FB5ED1B44771800EF26128FEE44 /* Pods-RespectU.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RespectU.release.xcconfig"; path = "Pods/Target Support Files/Pods-RespectU/Pods-RespectU.release.xcconfig"; sourceTree = ""; }; + 720D3E6C26142ACBA59C9F7822C204CC /* Pods_RespectU.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RespectU.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D9B229B6B9B7142C2A461D7DEB2A7113 /* RUButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUButton.swift; sourceTree = ""; }; A4B1BD7EAB31E7E51B602AF90FC5C2AE /* Rank.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Rank.swift; sourceTree = ""; }; - A52641BDB047E88FFE60B9F1EB7F89D8 /* APIService+Ranking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Ranking.swift"; sourceTree = ""; }; + E12E3AA69AEC8526DA02450D9F486C31 /* Ranking.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Ranking.storyboard; sourceTree = ""; }; + E9EA4615ADDF5106D45E6C157F9935FE /* Ranking4BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking4BTableViewController.swift; sourceTree = ""; }; A57D6592351D9AD16368506EE4633557 /* Ranking5BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking5BTableViewController.swift; sourceTree = ""; }; - A646CCC720C494D646FECAB5677C1E21 /* RecordBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordBaseTableViewController.swift; sourceTree = ""; }; - A7267843D0764A20BFC44647A8069076 /* SongResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongResponse.swift; sourceTree = ""; }; - A875376A5EBE583D9D47E2CCA367EB4F /* TrophyTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTechnika3TableViewController.swift; sourceTree = ""; }; - A9BE0A154D3D7E018D76684B281CECD0 /* MissionSection.BS+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.BS+Gradient.swift"; sourceTree = ""; }; - ABF4E0839B1BC3BA0A3E14EA1484CB79 /* SongTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTrilogyTableViewController.swift; sourceTree = ""; }; - AEEACD594FBA67A330D104F816D4D968 /* AchievementViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementViewController.swift; sourceTree = ""; }; - AF131ED7C45FABB6AD6B1A75998373F8 /* APIService+Song.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Song.swift"; sourceTree = ""; }; - AFC8A42FD9DBB28DB007F737E8557BB7 /* PerformanceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceViewController.swift; sourceTree = ""; }; - B0BA4578D4298BF7ECAD291A9230D5DA /* UITableViewCell+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableViewCell+.swift"; sourceTree = ""; }; - B238705DEEA8ACF0182DF0BB41B2CB0D /* RecordInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordInfo.swift; sourceTree = ""; }; - B6594C9F6573B04AED144F6F3F3B9AA6 /* APIService+Record.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Record.swift"; sourceTree = ""; }; + DA8059779D1985F721E78B753EC4D776 /* Ranking6BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking6BTableViewController.swift; sourceTree = ""; }; + 2A61C0A29FAF3BAFDEA230CF7D855312 /* Ranking8BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking8BTableViewController.swift; sourceTree = ""; }; + 3C9306E0C24359552A85518112EFCC9D /* RankingBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingBaseTableViewController.swift; sourceTree = ""; }; B6DC6B20F4435BC55F0363155B189EA9 /* RankingCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingCell.swift; sourceTree = ""; }; - B7FF17875A680B2300216805CB27FC73 /* SongViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongViewController.swift; sourceTree = ""; }; - B9C089EAB1BA22820E5EE21E20936E08 /* SongCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongCETableViewController.swift; sourceTree = ""; }; - BB34EF52E48B6B9E32AE64FEDD76C088 /* Top504BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top504BTableViewController.swift; sourceTree = ""; }; - BB408736A795C68EBA417CAF1C9391F9 /* SearchByNoteView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchByNoteView.xib; sourceTree = ""; }; - BBC86C6F0F8F435FA71C29C5A32617CF /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; - BFF5B6DC44A390FCF7DBF622AADB5833 /* Top50BaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top50BaseTableViewController.swift; sourceTree = ""; }; - C0DFBF524855854CAC775CF09B6A5F92 /* APIService+Trophy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Trophy.swift"; sourceTree = ""; }; - C18E5F5E8BB5540D91968DDECE31869A /* Download.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Download.storyboard; sourceTree = ""; }; - C194554A77881C517795E91A8F23124E /* SearchRecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordViewController.swift; sourceTree = ""; }; - C1F70C1B0BF44B8904203164AE9B8E1B /* Top505BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top505BTableViewController.swift; sourceTree = ""; }; - C2C849886AF9CEC2084D57D6610826D0 /* GuideThirdCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideThirdCell.swift; sourceTree = ""; }; - C48AF305EFDF8EDEE8CE8D136BC9FEEB /* SignInTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInTextField.swift; sourceTree = ""; }; - C6F278314CCBAFC8DD80108CFDC5B48D /* SummaryCollectionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SummaryCollectionCell.xib; sourceTree = ""; }; - C728DBB0614587CD2759E53BD1A65882 /* AchievementMusicTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementMusicTableViewController.swift; sourceTree = ""; }; + 1BD862D1F9C81B97810DC117707740FB /* RankingCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingCell.xib; sourceTree = ""; }; + 0F1B980355224D49337F83B418D77DF9 /* RankingResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingResponse.swift; sourceTree = ""; }; + 656538575F3D4D03C665378FB2C6E482 /* RankingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RankingViewController.swift; sourceTree = ""; }; C7897FFE7C5D2CCD0252A92D83D3A242 /* Reachability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reachability.swift; sourceTree = ""; }; + ED7D4A7210DBE5C6BF5E8E60901CEC24 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5AF72C1C7A71F43D43589C3E8792F7A9 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D13809AF4354422A199374B3465D8656 /* Record.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Record.storyboard; sourceTree = ""; }; + 4BBD21C11306FD9C54E163A20FF8FA24 /* RecordAllTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordAllTableViewController.swift; sourceTree = ""; }; + 101CE93B365835BBA1D7A917C71B524B /* RecordBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordBSTableViewController.swift; sourceTree = ""; }; + A646CCC720C494D646FECAB5677C1E21 /* RecordBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordBaseTableViewController.swift; sourceTree = ""; }; + 7D774173D345CCDC64F1E65BA46CC48A /* RecordButtonInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordButtonInfo.swift; sourceTree = ""; }; + 164C0B9C9329B63A84146A68B44211AF /* RecordCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordCETableViewController.swift; sourceTree = ""; }; + 2991773C4B90001F83182265FA5298FA /* RecordCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordCell.swift; sourceTree = ""; }; + CA9B676C5D60B5CCB2663B17DFB0D19B /* RecordCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RecordCell.xib; sourceTree = ""; }; + FE923EF715087FF2BBEAA80043390A02 /* RecordDifficultyInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordDifficultyInfo.swift; sourceTree = ""; }; + B238705DEEA8ACF0182DF0BB41B2CB0D /* RecordInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordInfo.swift; sourceTree = ""; }; C7CF5FBE9FE442E18A869E8FFDBB6596 /* RecordPortable1TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordPortable1TableViewController.swift; sourceTree = ""; }; - C865E14A01D3C67FEEE5EAF375899C7D /* TrophyBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyBaseTableViewController.swift; sourceTree = ""; }; + 5F75FFB849D9280269D8A4130772A059 /* RecordPortable2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordPortable2TableViewController.swift; sourceTree = ""; }; + 0A7A724B52192252A0101E5F2B3DC658 /* RecordRespectTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordRespectTableViewController.swift; sourceTree = ""; }; + 8BE876B3189C89826136B421C811E381 /* RecordResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordResponse.swift; sourceTree = ""; }; C86C6C9262E8EB75FB7589033C1F2EC4 /* RecordTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTechnika1TableViewController.swift; sourceTree = ""; }; - C9846CC66092E2BF0D2992D65E7468CD /* LanguageInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageInfo.swift; sourceTree = ""; }; + 4CAF7442CCE225037AD440CAED1A2F46 /* RecordTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTechnika2TableViewController.swift; sourceTree = ""; }; + 394457A6318FCBA35633C05384AA8D50 /* RecordTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTechnika3TableViewController.swift; sourceTree = ""; }; + DB8FDB96924415810F26D8A3D5DCC643 /* RecordTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTrilogyTableViewController.swift; sourceTree = ""; }; + 6D899C6158365DC40A43EFA3FBD53860 /* RecordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordView.swift; sourceTree = ""; }; + A832024764FD1738185268E528614C3A /* RecordView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RecordView.xib; sourceTree = ""; }; + 6CDC8CD7AE0EAE20F102844365138098 /* RecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordViewController.swift; sourceTree = ""; }; + 493FFC326138371B1937E2E2D26236EA /* RespectU.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RespectU.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 16CA587AC64BBF7D9615B18AE922CCA5 /* SearchByLevelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchByLevelView.swift; sourceTree = ""; }; + 650873B493E00BDFE6552F230602E303 /* SearchByLevelView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchByLevelView.xib; sourceTree = ""; }; + D8DA77CE4436FD7F1B3A85A2993A6875 /* SearchByNoteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchByNoteView.swift; sourceTree = ""; }; + 65A74FCC87D5D9BBBEBAE0F47B7B68DA /* SearchByNoteView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchByNoteView.xib; sourceTree = ""; }; + 8205116CE68B6DBD1CE90AC4439DE832 /* SearchByRatingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchByRatingView.swift; sourceTree = ""; }; + B6DD826AB9C764BFEA1BFE277466B01C /* SearchByRatingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchByRatingView.xib; sourceTree = ""; }; + CA2ABF5BEC5BFF80DD120FEE7AC45F14 /* SearchRecordDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordDetail.swift; sourceTree = ""; }; + 5C7E6B6B900C98599DF992D190397ED8 /* SearchRecordDetailCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordDetailCell.swift; sourceTree = ""; }; + E6C14F35B2B1A8D25A221C146D1C063B /* SearchRecordDetailCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchRecordDetailCell.xib; sourceTree = ""; }; + 4B54A2548B3BB3E75F221CEAFB441651 /* SearchRecordDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordDetailViewController.swift; sourceTree = ""; }; + C194554A77881C517795E91A8F23124E /* SearchRecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecordViewController.swift; sourceTree = ""; }; + 9A9970140918A7A61332718A9C9D8322 /* Series+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Series+UI.swift"; sourceTree = ""; }; + 9ADF8D0329CDE33DD67FC75E36D63E92 /* Series.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Series.swift; sourceTree = ""; }; + A085D0FCAAED86B5EF798D2FF4C4EE5E /* SignIn.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SignIn.storyboard; sourceTree = ""; }; + C48AF305EFDF8EDEE8CE8D136BC9FEEB /* SignInTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInTextField.swift; sourceTree = ""; }; + 423FC743627303AF97314223CD2F8B7B /* SignInViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInViewController.swift; sourceTree = ""; }; + D774FFC53CC59564C3B6E8255A6FDE76 /* SignUpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpViewController.swift; sourceTree = ""; }; + 3FAFF4A05D2722646FFDB1A59C751CA5 /* SkillLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevel.swift; sourceTree = ""; }; + 2AC69B55FC64D7C31A86A33852EAB0AC /* SkillLevelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevelCell.swift; sourceTree = ""; }; + 0A0189022C6BE4C949EA9505B6B3CA1C /* SkillLevelCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SkillLevelCell.xib; sourceTree = ""; }; + F0CC6B551EBD0EC656F35FD74247ED8D /* SkillLevelDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevelDetailView.swift; sourceTree = ""; }; + 62A4B18F7F37F18F820CB7408C91507F /* SkillLevelDetailView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SkillLevelDetailView.xib; sourceTree = ""; }; + 494ED1030BF0FF71A1E556B9468CD078 /* SkillLevelDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevelDetailViewController.swift; sourceTree = ""; }; + 0E664D69C5666D40413DD76EC3EEB905 /* SkillPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillPoint.swift; sourceTree = ""; }; + 9F70C67599FC388CA2F8CD0D50622CAF /* Song.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Song.storyboard; sourceTree = ""; }; + EBDBA54D2C97FB9571C3176FE9BFB0F4 /* SongAllTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongAllTableViewController.swift; sourceTree = ""; }; + A2D27FEA1E4484DB3A555B53E4AE9B1D /* SongBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongBSTableViewController.swift; sourceTree = ""; }; + F23F5730F0C449DE84E323068105AB47 /* SongBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongBaseTableViewController.swift; sourceTree = ""; }; CDD93D99DBE3AD0EB3D9A0617867ED07 /* SongButtonInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SongButtonInfo.swift; sourceTree = ""; }; + B9C089EAB1BA22820E5EE21E20936E08 /* SongCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongCETableViewController.swift; sourceTree = ""; }; + 59AC73FB70CC51A8AFAC0050C039CF14 /* SongCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongCell.swift; sourceTree = ""; }; + CDE48D134E382F52D49F7020BDAE3546 /* SongCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongCell.xib; sourceTree = ""; }; + 296CBA384CF912A9F2429A941DFB482D /* SongInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SongInfo.swift; sourceTree = ""; }; + 06634141A9D0AD50CB5CF1C56489B8AB /* SongPortable1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongPortable1TableViewController.swift; sourceTree = ""; }; CFE0B54506B42D2B43A668825784A336 /* SongPortable2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongPortable2TableViewController.swift; sourceTree = ""; }; - D04A91E1391EB1A2505BB6E30EB1AD65 /* UploadViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadViewController.swift; sourceTree = ""; }; - D0B7E2EA07502142424EC51FE1C1D182 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = ""; }; - D0C2415AABC509E942301DF3589F55F8 /* TrophyBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyBSTableViewController.swift; sourceTree = ""; }; - D13809AF4354422A199374B3465D8656 /* Record.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Record.storyboard; sourceTree = ""; }; - D1936880A3D30B8BC49B8587F6778EEA /* MissionRespectTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionRespectTableViewController.swift; sourceTree = ""; }; - D208137CF7035F090957DD52BFD704BC /* AchievementAllTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementAllTableViewController.swift; sourceTree = ""; }; - D30DD51658A0E07C8F795B59D8C5A930 /* MissionCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionCETableViewController.swift; sourceTree = ""; }; - D538492B9D665E6049971A842544B8F0 /* SearchRecordDetailCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchRecordDetailCell.xib; sourceTree = ""; }; - D550E00BAB0ADC8AEF6EFE91AD2134E9 /* SearchByRatingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchByRatingView.xib; sourceTree = ""; }; - D5A1695D071CC7554C3FA877BC12B245 /* SummaryDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryDetailViewController.swift; sourceTree = ""; }; - D6C6A7F46818C574348C01D5E9938C60 /* Top506BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top506BTableViewController.swift; sourceTree = ""; }; D72A74447C5271E64A723356FA2C76C8 /* SongRespectTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongRespectTableViewController.swift; sourceTree = ""; }; - D774FFC53CC59564C3B6E8255A6FDE76 /* SignUpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpViewController.swift; sourceTree = ""; }; - D78571F88000DB2A377C1A859F5F2B0B /* MissionStageInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MissionStageInfo.swift; sourceTree = ""; }; + A7267843D0764A20BFC44647A8069076 /* SongResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongResponse.swift; sourceTree = ""; }; + 8ABC647AFC387EECD6791F100EBED31D /* SongTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTechnika1TableViewController.swift; sourceTree = ""; }; + EED82018840FD1A5C9368EF3CB51DB1E /* SongTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTechnika2TableViewController.swift; sourceTree = ""; }; + 59AA6BC0369E1C3C4B40AB8BE89DBF5A /* SongTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTechnika3TableViewController.swift; sourceTree = ""; }; + ABF4E0839B1BC3BA0A3E14EA1484CB79 /* SongTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTrilogyTableViewController.swift; sourceTree = ""; }; + B7FF17875A680B2300216805CB27FC73 /* SongViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongViewController.swift; sourceTree = ""; }; + 0A21F405F43A9AF49F10051F778F3FA4 /* Storyboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Storyboard.swift; sourceTree = ""; }; + 08640281899B112DEB6A0A0A56A169B7 /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = ""; }; + D0B7E2EA07502142424EC51FE1C1D182 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = ""; }; D8D3AEF54E1F8CB4F0C230AE0F4A274D /* SummaryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryCell.swift; sourceTree = ""; }; - D8DA77CE4436FD7F1B3A85A2993A6875 /* SearchByNoteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchByNoteView.swift; sourceTree = ""; }; - D8DDC6393F8E75DB389B0B80A6930D30 /* swiftgen.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = swiftgen.yml; sourceTree = ""; }; - D9B229B6B9B7142C2A461D7DEB2A7113 /* RUButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUButton.swift; sourceTree = ""; }; - DA5A4E6832F2B48BFFE29D6EE9E1BFEF /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .swiftlint.yml; sourceTree = ""; }; - DA8059779D1985F721E78B753EC4D776 /* Ranking6BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking6BTableViewController.swift; sourceTree = ""; }; - DB8FDB96924415810F26D8A3D5DCC643 /* RecordTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordTrilogyTableViewController.swift; sourceTree = ""; }; - DC1C93791BC6091924D5E9BEA314201C /* MissionTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionTrilogyTableViewController.swift; sourceTree = ""; }; - DF1CBDA6DFA6F7DC1C8CFDE819CB27EC /* SearchByRatingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchByRatingView.swift; sourceTree = ""; }; - DF44E865CAECD23B67EC669F4F499627 /* RankingCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingCell.xib; sourceTree = ""; }; - E12E3AA69AEC8526DA02450D9F486C31 /* Ranking.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Ranking.storyboard; sourceTree = ""; }; - E2056D7C4194815BBE52A3F13FAF7125 /* MissionInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MissionInfo.swift; sourceTree = ""; }; - E4592DA185138E2C675A2E63C84920D1 /* TrophyCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TrophyCell.xib; sourceTree = ""; }; - E566F2224770BCDA7139D3E7C9B1AC34 /* SongCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongCell.xib; sourceTree = ""; }; + EDC63C6945BBA9A7159F95B906AC4F52 /* SummaryCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SummaryCell.xib; sourceTree = ""; }; + 7141F43FD5DD9A34D35E2692CB721D4A /* SummaryCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryCollectionCell.swift; sourceTree = ""; }; + DBBD5EC70A4CB6A25BE54391F562C59F /* SummaryCollectionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SummaryCollectionCell.xib; sourceTree = ""; }; + D5A1695D071CC7554C3FA877BC12B245 /* SummaryDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryDetailViewController.swift; sourceTree = ""; }; + 7E1371C9E28AB4CD6449FA7FD0074E25 /* Tip.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Tip.storyboard; sourceTree = ""; }; E5B397154AED8CE46A5D63ACC715A8F1 /* TipInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TipInfo.swift; sourceTree = ""; }; - E683F525A54716C4D6BE56A96EEDCB29 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - E9EA4615ADDF5106D45E6C157F9935FE /* Ranking4BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ranking4BTableViewController.swift; sourceTree = ""; }; - EBDBA54D2C97FB9571C3176FE9BFB0F4 /* SongAllTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongAllTableViewController.swift; sourceTree = ""; }; - EC0C1D43DE39EACC238837AEAB67663B /* SummaryCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SummaryCell.xib; sourceTree = ""; }; - ECF59229051F5AD6A883EFD1E5A2603E /* AchievementBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AchievementBaseTableViewController.swift; sourceTree = ""; }; - ED7D4A7210DBE5C6BF5E8E60901CEC24 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EE6D08E337A7395C974382D3D49B50ED /* APIService+Achievement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Achievement.swift"; sourceTree = ""; }; - EED82018840FD1A5C9368EF3CB51DB1E /* SongTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongTechnika2TableViewController.swift; sourceTree = ""; }; - F0CC6B551EBD0EC656F35FD74247ED8D /* SkillLevelDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillLevelDetailView.swift; sourceTree = ""; }; - F14D88E672A1CA362BBF23009477E7C7 /* APIService+Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Base.swift"; sourceTree = ""; }; - F23F5730F0C449DE84E323068105AB47 /* SongBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongBaseTableViewController.swift; sourceTree = ""; }; - F2731BD8B5A3E3953125EBC4F1ACA6B7 /* VersionResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionResponse.swift; sourceTree = ""; }; - F66F1F16E4879E82613F8C07E0062B2A /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; + 753FD1B3D1EB8456BE034D69FBCBB329 /* TipResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipResponse.swift; sourceTree = ""; }; + 91CCF1B33BD4D77BF5650BED697154D2 /* TipViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipViewController.swift; sourceTree = ""; }; + 721D3123DF4906650661109B36D4EFC2 /* Top50.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Top50.storyboard; sourceTree = ""; }; + BB34EF52E48B6B9E32AE64FEDD76C088 /* Top504BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top504BTableViewController.swift; sourceTree = ""; }; + C1F70C1B0BF44B8904203164AE9B8E1B /* Top505BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top505BTableViewController.swift; sourceTree = ""; }; + D6C6A7F46818C574348C01D5E9938C60 /* Top506BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top506BTableViewController.swift; sourceTree = ""; }; + 70FCD8F7C26C5E1F0B0EBF746748BBBF /* Top508BTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top508BTableViewController.swift; sourceTree = ""; }; + BFF5B6DC44A390FCF7DBF622AADB5833 /* Top50BaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top50BaseTableViewController.swift; sourceTree = ""; }; + 4A4C312CB6DC58847B1ACBECB8F95A8F /* Top50Cell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top50Cell.swift; sourceTree = ""; }; + 1907607DB6FA22EE22397D314C25E2C6 /* Top50Cell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Top50Cell.xib; sourceTree = ""; }; + 365A3C9BFD2062AA5D08B56E995F9474 /* Top50ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Top50ViewController.swift; sourceTree = ""; }; + 4D08ADAD88BBB07FBB95CF8CD62CB6ED /* Trophy.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Trophy.storyboard; sourceTree = ""; }; + D0C2415AABC509E942301DF3589F55F8 /* TrophyBSTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyBSTableViewController.swift; sourceTree = ""; }; + C865E14A01D3C67FEEE5EAF375899C7D /* TrophyBaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyBaseTableViewController.swift; sourceTree = ""; }; + 67B09CACDD60C508B1CEBEF21A39E14C /* TrophyCETableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyCETableViewController.swift; sourceTree = ""; }; + 7C8E87A2B03543FCDFA459E10DCEBCDF /* TrophyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyCell.swift; sourceTree = ""; }; + F3C75B35A37617F2B6A9DD8208FE2AD9 /* TrophyCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TrophyCell.xib; sourceTree = ""; }; + 4298E98CCC40A6C7EFDE5510CEDED521 /* TrophyGrade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyGrade.swift; sourceTree = ""; }; + 9703F75E9D1960A0BAA7CFC8240AE541 /* TrophyInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrophyInfo.swift; sourceTree = ""; }; FA2852A77D854438A0267E99C8067691 /* TrophyLinkDiskTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyLinkDiskTableViewController.swift; sourceTree = ""; }; - FB1D1400F4F8A5579A4BD339D8661CC6 /* MissionDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionDetailViewController.swift; sourceTree = ""; }; - FBF7FCA66B507564BF411BB82D824394 /* MissionSection.Technika3+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MissionSection.Technika3+Gradient.swift"; sourceTree = ""; }; - FE923EF715087FF2BBEAA80043390A02 /* RecordDifficultyInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordDifficultyInfo.swift; sourceTree = ""; }; FF98B5B953A51AE19F56E640C40E2687 /* TrophyRespectTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyRespectTableViewController.swift; sourceTree = ""; }; + 26A426486B63E886A1D72A62EC230A4D /* TrophyResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyResponse.swift; sourceTree = ""; }; + 7C2B8192D8437447475180972270F1A2 /* TrophyTechnika1TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTechnika1TableViewController.swift; sourceTree = ""; }; + 9DDBE69BDF91490724A4508E8150A75F /* TrophyTechnika2TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTechnika2TableViewController.swift; sourceTree = ""; }; + A875376A5EBE583D9D47E2CCA367EB4F /* TrophyTechnika3TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTechnika3TableViewController.swift; sourceTree = ""; }; + 40F9848262F8DA6D81D931CC8DE5FA0A /* TrophyTrilogyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyTrilogyTableViewController.swift; sourceTree = ""; }; + 54A0585B9094D54EA2EE91A30C6265FA /* TrophyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrophyViewController.swift; sourceTree = ""; }; + 42BE04F264C300B56C92EE575A854683 /* UIAlertController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIAlertController+.swift"; sourceTree = ""; }; + 2FC485CCFD9749EE1E561DFAE98EA11C /* UIColor+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+.swift"; sourceTree = ""; }; + B0BA4578D4298BF7ECAD291A9230D5DA /* UITableViewCell+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableViewCell+.swift"; sourceTree = ""; }; + 4DB6EB0A090B3EC667134B3DD24AA2A8 /* UIView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+.swift"; sourceTree = ""; }; + 0933C1D68D4630ABCB0E824F3B06E6FA /* UIViewController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+.swift"; sourceTree = ""; }; + 808F49E6EA3E0B9F118A59BCD1C399A9 /* Upload.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Upload.storyboard; sourceTree = ""; }; + D04A91E1391EB1A2505BB6E30EB1AD65 /* UploadViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadViewController.swift; sourceTree = ""; }; + 45291D32AD99A8C491E4A69A15AB4D44 /* UserResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserResponse.swift; sourceTree = ""; }; + BBC86C6F0F8F435FA71C29C5A32617CF /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; + A49DC68ED49BE1C95E3D0C553CB3C0D0 /* VersionInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionInfo.swift; sourceTree = ""; }; + F2731BD8B5A3E3953125EBC4F1ACA6B7 /* VersionResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionResponse.swift; sourceTree = ""; }; + 1B070570A49E0EE97FB9D7A7BEE9915B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + 9143E2A18693E399D37E0F432BB4A9A7 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/LaunchScreen.strings; sourceTree = ""; }; + D8DDC6393F8E75DB389B0B80A6930D30 /* swiftgen.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = swiftgen.yml; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -501,28 +501,28 @@ name = Frameworks; sourceTree = ""; }; - 1914B521223889F200BA057E /* XIBs */ = { + CA5641B4D07921D199A3C326E7E11880 /* XIBs */ = { isa = PBXGroup; children = ( - 0A55900F26C3996946BE4F93D6DA3621 /* AchievementCell.xib */, - 8345DDA3C2BB8226C719046C36C1C125 /* GuideFirstCell.xib */, - 27B3098AC1D795D61653C34864ED20F9 /* GuideSecondCell.xib */, - 87BC688E45E35568921856EA90F48939 /* GuideThirdCell.xib */, - 274D0B448B5CE4F3F072A2E8F1A08173 /* MissionCell.xib */, - DF44E865CAECD23B67EC669F4F499627 /* RankingCell.xib */, - 8872346BBBB0B7BAFD7D7D14AB637E94 /* RecordCell.xib */, - 9CCC3BF2DFAE7E90D1AB5AE1DDA0283F /* RecordView.xib */, - 447A6CDF1125075CFA6FF3AA94D38056 /* SearchByLevelView.xib */, - BB408736A795C68EBA417CAF1C9391F9 /* SearchByNoteView.xib */, - D550E00BAB0ADC8AEF6EFE91AD2134E9 /* SearchByRatingView.xib */, - D538492B9D665E6049971A842544B8F0 /* SearchRecordDetailCell.xib */, - 58F94B11D0652E774E5A75E6FC9875E3 /* SkillLevelCell.xib */, - 0D06706BBF1BDD733B678B932EBBB7D5 /* SkillLevelDetailView.xib */, - E566F2224770BCDA7139D3E7C9B1AC34 /* SongCell.xib */, - EC0C1D43DE39EACC238837AEAB67663B /* SummaryCell.xib */, - C6F278314CCBAFC8DD80108CFDC5B48D /* SummaryCollectionCell.xib */, - 3329CE7FE589A94E7D6F4B0D771A64AE /* Top50Cell.xib */, - E4592DA185138E2C675A2E63C84920D1 /* TrophyCell.xib */, + F957C9D0578879C4BFDF188CC7E9DB68 /* AchievementCell.xib */, + 4145F1EB5D7436740025D90996B48C6B /* GuideFirstCell.xib */, + ACAACBB2302A38B15286B2F10D57B0D2 /* GuideSecondCell.xib */, + 570419DC99D9A09F38A4AC7F521FCA9B /* GuideThirdCell.xib */, + 6F96CA2C329587E39822104CEF6C2C4D /* MissionCell.xib */, + 1BD862D1F9C81B97810DC117707740FB /* RankingCell.xib */, + CA9B676C5D60B5CCB2663B17DFB0D19B /* RecordCell.xib */, + A832024764FD1738185268E528614C3A /* RecordView.xib */, + 650873B493E00BDFE6552F230602E303 /* SearchByLevelView.xib */, + 65A74FCC87D5D9BBBEBAE0F47B7B68DA /* SearchByNoteView.xib */, + B6DD826AB9C764BFEA1BFE277466B01C /* SearchByRatingView.xib */, + E6C14F35B2B1A8D25A221C146D1C063B /* SearchRecordDetailCell.xib */, + 0A0189022C6BE4C949EA9505B6B3CA1C /* SkillLevelCell.xib */, + 62A4B18F7F37F18F820CB7408C91507F /* SkillLevelDetailView.xib */, + CDE48D134E382F52D49F7020BDAE3546 /* SongCell.xib */, + EDC63C6945BBA9A7159F95B906AC4F52 /* SummaryCell.xib */, + DBBD5EC70A4CB6A25BE54391F562C59F /* SummaryCollectionCell.xib */, + 1907607DB6FA22EE22397D314C25E2C6 /* Top50Cell.xib */, + F3C75B35A37617F2B6A9DD8208FE2AD9 /* TrophyCell.xib */, ); path = XIBs; sourceTree = ""; @@ -712,7 +712,7 @@ children = ( 3C37ECC78732D6E4E089B5B5F40D5C39 /* Realm */, 2AA94CA525D5326C0F9292D848B27357 /* Response */, - 1914B51F223805BD00BA057E /* Persistence.swift */, + 42590FD8BDFA7FDB31E81239FE1C5C9D /* Persistence.swift */, ); path = Models; sourceTree = ""; @@ -839,7 +839,7 @@ DF613463216FC79F328D85241366F912 /* Views */ = { isa = PBXGroup; children = ( - 1914B521223889F200BA057E /* XIBs */, + CA5641B4D07921D199A3C326E7E11880 /* XIBs */, 623DBE7ABE62C6ED2C6A96D8B561D1BC /* AchievementCell.swift */, 48EB4DE7C46CAC769FAD64B4062EA5AC /* GuideFirstCell.swift */, 88C214B5C6340C681D687A5837D49CB2 /* GuideSecondCell.swift */, @@ -850,7 +850,7 @@ 6D899C6158365DC40A43EFA3FBD53860 /* RecordView.swift */, 16CA587AC64BBF7D9615B18AE922CCA5 /* SearchByLevelView.swift */, D8DA77CE4436FD7F1B3A85A2993A6875 /* SearchByNoteView.swift */, - DF1CBDA6DFA6F7DC1C8CFDE819CB27EC /* SearchByRatingView.swift */, + 8205116CE68B6DBD1CE90AC4439DE832 /* SearchByRatingView.swift */, 5C7E6B6B900C98599DF992D190397ED8 /* SearchRecordDetailCell.swift */, C48AF305EFDF8EDEE8CE8D136BC9FEEB /* SignInTextField.swift */, 2AC69B55FC64D7C31A86A33852EAB0AC /* SkillLevelCell.swift */, @@ -884,9 +884,9 @@ 9AF510989C994AF286BAC6EFC98F3D86 /* Note.swift */, D9B229B6B9B7142C2A461D7DEB2A7113 /* RUButton.swift */, A4B1BD7EAB31E7E51B602AF90FC5C2AE /* Rank.swift */, + CA2ABF5BEC5BFF80DD120FEE7AC45F14 /* SearchRecordDetail.swift */, 9ADF8D0329CDE33DD67FC75E36D63E92 /* Series.swift */, 4298E98CCC40A6C7EFDE5510CEDED521 /* TrophyGrade.swift */, - 1914B51D2236B3E500BA057E /* SearchRecordDetail.swift */, ); path = Common; sourceTree = ""; @@ -977,40 +977,40 @@ files = ( EE5801B1F86B92BE4282BB1D1EAECC52 /* .swiftlint.yml in Resources */, 6D1619C4051B8073FDAE2D1EE0F28DF1 /* Achievement.storyboard in Resources */, - E0EDFB525D4882309B4E8E08CC6118CF /* AchievementCell.xib in Resources */, + DCE96025AC799FDF2C9F73446B22DA1D /* AchievementCell.xib in Resources */, 90AE9C19BBE72AFD47EC3E391B1EAA1A /* Assets.xcassets in Resources */, 8E46243F171B5DE4C8636DE0C7C4BC09 /* Download.storyboard in Resources */, 3BB933CDB0A2F0ABF0AD9921098EB4E0 /* Guide.storyboard in Resources */, - E1BA221CFFF61F520AD65F33AA99A1FB /* GuideFirstCell.xib in Resources */, - FC8FBD22093105C52F038E7D50AE6834 /* GuideSecondCell.xib in Resources */, - D5F72F3C2F85C879DA08951E8E516A4F /* GuideThirdCell.xib in Resources */, + D56DE493782E270E40CA51D4CDFBBD83 /* GuideFirstCell.xib in Resources */, + 7F9C5B8E757967B095FD6904890294BD /* GuideSecondCell.xib in Resources */, + 8EB9D7D19F3E905E268B6250460CEC96 /* GuideThirdCell.xib in Resources */, 6B55743E37BEBB24B1B5DA326BAC689B /* Init.storyboard in Resources */, E0045A82AD56B280294AD01E55A8F38A /* LaunchScreen.storyboard in Resources */, EC915038C96954FF4B4502B9245CF3D0 /* Localizable.strings in Resources */, 6873CA61A5E3DCF9DCE5B8DD11436346 /* Mission.storyboard in Resources */, - 34ADC537FFCD0E32831D26AB2C1DD1B9 /* MissionCell.xib in Resources */, + 2D1AD8A8A5662FEE12F6EED06FD06136 /* MissionCell.xib in Resources */, FCFE1C1D08C5F261AD3D0C70A4B69522 /* Performance.storyboard in Resources */, 5DD021C2FA893BE6587462DA9A2A44F0 /* Ranking.storyboard in Resources */, - 411A370D58452A171552DFDB8AE6CDFB /* RankingCell.xib in Resources */, + 9EEC50F04F496B836CC03F7F55E1E041 /* RankingCell.xib in Resources */, 067CB8ADCA8BA53E3AF6B4A7C94E5AB7 /* Record.storyboard in Resources */, - 018B35D50D5676BBBCC54CCB3CA661C1 /* RecordCell.xib in Resources */, - 947B12FA1B9BEA069196FA8C3F0A93CC /* RecordView.xib in Resources */, - 7B9E2E0FE30E84D6166FBE77C171C8D9 /* SearchByLevelView.xib in Resources */, - F5FFD36CB7ABB20DBB14EADA3DF1E89F /* SearchByNoteView.xib in Resources */, - 4945A0D92FA68D09476BE7AFB8AE2429 /* SearchByRatingView.xib in Resources */, - C2E8F29F1DC6CE924DC66758994B7356 /* SearchRecordDetailCell.xib in Resources */, + 3AF1AB6EF468C285F91398ABBA44F207 /* RecordCell.xib in Resources */, + 7A66BC667B82C33D8645F383FBB76040 /* RecordView.xib in Resources */, + FEDA948775D81128E2E2B3D648FF361D /* SearchByLevelView.xib in Resources */, + 5120FF3DED6B29ACE2B63AD182E35A7F /* SearchByNoteView.xib in Resources */, + 478698557F1DF8B2F9514DFC1DEBC2C4 /* SearchByRatingView.xib in Resources */, + 3B4823649EB3A4B226BB8675B0D96D34 /* SearchRecordDetailCell.xib in Resources */, CF652EC9A502638F95140E9BBD58327D /* SignIn.storyboard in Resources */, - 4D93915A70FFA3B0270461492B3EDBCD /* SkillLevelCell.xib in Resources */, - B8B11751AD0B80290C2BD90E08516F00 /* SkillLevelDetailView.xib in Resources */, + 2B4E785D2FF0512CDC3572A616A09DEA /* SkillLevelCell.xib in Resources */, + 84547A3E02B63C2D70B34C9F6602FF6D /* SkillLevelDetailView.xib in Resources */, 9E93FD8E5248FEAC12520317AE75E78F /* Song.storyboard in Resources */, - 8D459E7659B6D367A465BF313930A8FC /* SongCell.xib in Resources */, - 8195A797A997EB11E01BA33CB200032F /* SummaryCell.xib in Resources */, - A1D24F6E660A1AB2EB33616C3EB5E0DE /* SummaryCollectionCell.xib in Resources */, + 6C452B565623C505DA42D49FFBFA7FB0 /* SongCell.xib in Resources */, + 469E026861D632B5A1E4788F3168F2EE /* SummaryCell.xib in Resources */, + A9B9CE0F13F59292327D3DDD96BB4C27 /* SummaryCollectionCell.xib in Resources */, FA269EB89C42EEF82524955630812EA2 /* Tip.storyboard in Resources */, F2510C6CE3EB733695848E79C13CA0ED /* Top50.storyboard in Resources */, - EA1752A5D1D32B7E68ED6F87A95DC83F /* Top50Cell.xib in Resources */, + F1041F8EA1D2FF11AEB9C969E7201130 /* Top50Cell.xib in Resources */, 956AB4AC68AAE08C8B1027E71234A7D6 /* Trophy.storyboard in Resources */, - 6C3633F6762BD5A374A277D8F7E146FB /* TrophyCell.xib in Resources */, + 63AA7EFC9C52C567308AC665EB07E0E4 /* TrophyCell.xib in Resources */, C86374E3E25A9D8B40E03568CB353DCE /* Upload.storyboard in Resources */, E8AC5E159FA0754BC70508BDEDA438B2 /* swiftgen.yml in Resources */, ); @@ -1122,7 +1122,6 @@ C49BDBE7974F6333739B639CFBC5DB8A /* BaseViewController.swift in Sources */, 16E72F47E46466C1D0F72348BC1734D2 /* Button.swift in Sources */, 94382F584F379628F8CCCEEF51AA8C23 /* CAGradientLayer+.swift in Sources */, - 1914B520223805BD00BA057E /* Persistence.swift in Sources */, 36105E909ADA369CB7D0D1B675FED1F4 /* Difficulty.swift in Sources */, 1B7BDC0518E8261BB7E114B238485E0D /* Double+.swift in Sources */, 53DC6066E155D2567781E494547956C9 /* DownloadViewController.swift in Sources */, @@ -1164,6 +1163,7 @@ 1D5A93ADB7E0551D8265EC21D90E8114 /* Note.swift in Sources */, DC8239DAEF1700D671C8ADC1F04121DA /* OldRecordInfo.swift in Sources */, A355C78EC61F119CC6EBBA3E16B5AA0A /* PerformanceViewController.swift in Sources */, + B3CE24BE8E899EE8D89D56F5921A42A9 /* Persistence.swift in Sources */, C295B902F2B60D1CF3FA2B1334479A65 /* RUButton.swift in Sources */, 9F02A015FDD5629384099D02332F9AF8 /* Rank.swift in Sources */, 48175A5C8370F8ED872DDDAD970867BB /* Ranking4BTableViewController.swift in Sources */, @@ -1195,7 +1195,8 @@ 6390715145BD10663A5A4D6C352868DF /* RecordViewController.swift in Sources */, 56B103D4D21450CC4D0BC3D98286A3AF /* SearchByLevelView.swift in Sources */, 3FC482296754D98BE86BD7B18E564694 /* SearchByNoteView.swift in Sources */, - 71B5BF74B4D1647C3AA79FC664464F6F /* SearchByRatingView.swift in Sources */, + D26CDBFA3B71B4DAF56C820443B6C735 /* SearchByRatingView.swift in Sources */, + EA3A243DC605E1721F5A5FECA01218B2 /* SearchRecordDetail.swift in Sources */, E909A0D435DE1970F26D9E69E991ED41 /* SearchRecordDetailCell.swift in Sources */, EB500C397294D1867BE4A5323F2B399E /* SearchRecordDetailViewController.swift in Sources */, 15D85A72D8E253A709907E22B1B919BA /* SearchRecordViewController.swift in Sources */, @@ -1241,7 +1242,6 @@ C3551CA001C950C2BABA8E95D6EFAAD6 /* Top50BaseTableViewController.swift in Sources */, 5F74C0FF12D461826448C86A14E4919D /* Top50Cell.swift in Sources */, 3B7DE92472A1872F8D09E85383AE7E95 /* Top50ViewController.swift in Sources */, - 1914B51E2236B3E500BA057E /* SearchRecordDetail.swift in Sources */, 1C4D888E2BECAA7E7447EC6E493D700E /* TrophyBSTableViewController.swift in Sources */, 554C372C44FEB3224C5EAE6E722D3D2B /* TrophyBaseTableViewController.swift in Sources */, BAF7C4779D1D74F482A5C62832C9AF0C /* TrophyCETableViewController.swift in Sources */, diff --git a/RespectU/Resources/Assets.xcassets/colors/mission/technika3/crewChallenge.colorset/Contents.json b/RespectU/Resources/Assets.xcassets/colors/mission/technika3/crewChallenge.colorset/Contents.json new file mode 100644 index 0000000..c6e5d3d --- /dev/null +++ b/RespectU/Resources/Assets.xcassets/colors/mission/technika3/crewChallenge.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "1.000", + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000" + } + } + } + ] +} \ No newline at end of file diff --git a/RespectU/Resources/Assets.xcassets/colors/mission/technika3/popMixing.colorset/Contents.json b/RespectU/Resources/Assets.xcassets/colors/mission/technika3/popMixing.colorset/Contents.json new file mode 100644 index 0000000..c6e5d3d --- /dev/null +++ b/RespectU/Resources/Assets.xcassets/colors/mission/technika3/popMixing.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "1.000", + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000" + } + } + } + ] +} \ No newline at end of file diff --git a/RespectU/Resources/SwiftGen/Assets.swift b/RespectU/Resources/SwiftGen/Assets.swift index 33bda8f..e96f002 100644 --- a/RespectU/Resources/SwiftGen/Assets.swift +++ b/RespectU/Resources/SwiftGen/Assets.swift @@ -44,6 +44,8 @@ internal enum Asset { internal static let technicalMixing = ColorAsset(name: "technicalMixing") internal static let clubMixing = ColorAsset(name: "clubMixing") internal static let starMixing = ColorAsset(name: "starMixing") + internal static let crewChallenge = ColorAsset(name: "crewChallenge") + internal static let popMixing = ColorAsset(name: "popMixing") internal static let rSide = ColorAsset(name: "rSide") internal static let tSide = ColorAsset(name: "tSide") internal static let portable1 = ColorAsset(name: "portable1") diff --git a/RespectU/Resources/SwiftGen/Strings.swift b/RespectU/Resources/SwiftGen/Strings.swift index 955a4b4..f323fff 100644 --- a/RespectU/Resources/SwiftGen/Strings.swift +++ b/RespectU/Resources/SwiftGen/Strings.swift @@ -77,6 +77,8 @@ internal enum L10n { internal static let error = L10n.tr("Localizable", "Error") /// 실패 internal static let fail = L10n.tr("Localizable", "Fail") + /// 닉네임을 변경하지 못했습니다. + internal static let failedToChangingYourNickname = L10n.tr("Localizable", "Failed to changing your nickname.") /// 내보낸 성과 기록 정보를 가져옵니다. internal static let getExportedPerformanceRecordData = L10n.tr("Localizable", "Get exported performance record data.") /// 그래프 @@ -247,6 +249,8 @@ internal enum L10n { internal static let storeRecordedPerformanceInformationOnTheServer = L10n.tr("Localizable", "Store recorded performance information on the server.") /// 성공 internal static let success = L10n.tr("Localizable", "Success") + /// 닉네임을 변경했습니다. + internal static let successfullyChangingYourNickname = L10n.tr("Localizable", "Successfully changing your nickname.") /// 요약 internal static let summary = L10n.tr("Localizable", "Summary") /// 설정값에 따라 첫 실행 화면에 표시되는 정보가 달라집니다. diff --git a/RespectU/Resources/ko.lproj/Localizable.strings b/RespectU/Resources/ko.lproj/Localizable.strings index d3b9311..0a39170 100644 --- a/RespectU/Resources/ko.lproj/Localizable.strings +++ b/RespectU/Resources/ko.lproj/Localizable.strings @@ -161,3 +161,6 @@ "Guide for DJMAX RESPECT" = "DJMAX RESPECT 가이드"; "Personal Setting" = "개인 설정"; "More" = "더보기"; + +"Successfully changing your nickname." = "닉네임을 변경했습니다."; +"Failed to changing your nickname." = "닉네임을 변경하지 못했습니다."; diff --git a/RespectU/Sources/AppDelegate.swift b/RespectU/Sources/AppDelegate.swift index 207fab7..e9e965c 100644 --- a/RespectU/Sources/AppDelegate.swift +++ b/RespectU/Sources/AppDelegate.swift @@ -59,7 +59,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { if let favoriteButton = UserDefaults.standard.string(forKey: "favoriteButton") { UserDefaults.standard.set(favoriteButton.lowercased(), forKey: "favoriteButton") } - // 전역 프로퍼티 설정 UINavigationBar.appearance().do { $0.setBackgroundImage(.init(), for: .default) $0.shadowImage = .init() diff --git a/RespectU/Sources/Common/Button.swift b/RespectU/Sources/Common/Button.swift index 24a247e..ad52334 100644 --- a/RespectU/Sources/Common/Button.swift +++ b/RespectU/Sources/Common/Button.swift @@ -41,5 +41,6 @@ enum Button: String { } } + /// The all buttons in normal mode. static let all: [Button] = [.button4, .button5, .button6, .button8] } diff --git a/RespectU/Sources/Common/MissionSection.swift b/RespectU/Sources/Common/MissionSection.swift index de47412..e9fc06f 100644 --- a/RespectU/Sources/Common/MissionSection.swift +++ b/RespectU/Sources/Common/MissionSection.swift @@ -8,11 +8,18 @@ import UIKit +protocol MissionSectionType { + + var color: UIColor? { get } + + func makeGradient(by direction: GradientDirection) -> CAGradientLayer? +} + /// The `enum` that defines each mission sections. enum MissionSection { /// The `enum` that defines RESPECT mission sections. - enum Respect: String { + enum Respect: String, MissionSectionType { /// RESPECT - Departure. case departure = "Departure" @@ -43,75 +50,174 @@ enum MissionSection { /// RESPECT - Destination. case destination = "Destination" + + var color: UIColor? { + switch self { + case .departure: return .departure + case .clubRoad645: return .clubRoad645 + case .maxTheater: return .maxTheater + case .anotherWorld: return .anotherWorld + case .backStage: return .backStage + case .chaosTheory: return .chaosTheory + case .soundLab: return .soundLab + case .visualizer: return .visualizer + case .developers: return .developers + case .destination: return .destination + } + } } /// The `enum` that defines TRILOGY mission sections. - enum Trilogy: String { + enum Trilogy: String, MissionSectionType { /// TRILOGY - T-SIDE. case tSide = "T-SIDE" /// TRILOGY - R-SIDE. case rSide = "R-SIDE" + + var color: UIColor? { + switch self { + case .tSide: return .tSide + case .rSide: return .rSide + } + } } /// The `enum` that defines CLAZZIQUAI EDITION mission sections. - enum CE: String { + enum CE: String, MissionSectionType { /// CE - Electronic City. case electronicCity = "Electronic City" /// CE - Metropolis. case metropolis = "Metropolis" + + var color: UIColor? { + switch self { + case .electronicCity: return .electronicCity + case .metropolis: return .metropolis + } + } } /// The `enum` that defines TECHNIKA 1 mission sections. - enum Technika1: String { + enum Technika1: String, MissionSectionType { /// TECHNIKA 1 - Platinum Mixing. case platinumMixing = "Platinum Mixing" /// TECHNIKA 1 - Technical Mixing. case technicalMixing = "Technical Mixing" + + var color: UIColor? { + switch self { + case .platinumMixing: return .platinumMixing + case .technicalMixing: return .technicalMixing + } + } } /// The `enum` that defines BLACK SQUARE mission sections. - enum BS: String { + enum BS: String, MissionSectionType { /// BS - Stylish Performance. case stylishPerformance = "Stylish Performance" /// BS - Absolute Sound. case absoluteSound = "Absolute Sound" - } - - /// The `enum` that defines LINK DISK mission sections. - enum LinkDisk: String { - /// LINK DISK - WHITE DISK. - case whiteDisk = "WHITE DISK" - - /// LINK DISK - BLACK DISK. - case blackDisk = "BLACK DISK" + var color: UIColor? { + switch self { + case .stylishPerformance: return .stylishPerformance + case .absoluteSound: return .absoluteSound + } + } } /// The `enum` that defines TECHNIKA 2 mission sections. - enum Technika2: String { + enum Technika2: String, MissionSectionType { /// TECHNIKA 2 - STAR MIXING. case starMixing = "STAR MIXING" /// TECHNIKA 2 - CLUB MIXING. case clubMixing = "CLUB MIXING" + + var color: UIColor? { + switch self { + case .starMixing: return .starMixing + case .clubMixing: return .clubMixing + } + } + } + + /// The `enum` that defines LINK DISK mission sections. + enum LinkDisk: String, MissionSectionType { + + /// LINK DISK - WHITE DISK. + case whiteDisk = "WHITE DISK" + + /// LINK DISK - BLACK DISK. + case blackDisk = "BLACK DISK" + + var color: UIColor? { + switch self { + case .whiteDisk: return .whiteDisk + case .blackDisk: return .blackDisk + } + } } /// The `enum` that defines TECHNIKA 3 mission sections. - enum Technika3: String { + enum Technika3: String, MissionSectionType { /// TECHNIKA 3 - POP MIXING. case popMixing = "POP MIXING" /// TECHNIKA 3 - Crew Challenge. case crewChallenge = "Crew Challenge" + + var color: UIColor? { + switch self { + case .popMixing: return .popMixing + case .crewChallenge: return .crewChallenge + } + } + } + + case respect + + case trilogy + + case ce + + case technika1 + + case bs + + case technika2 + + case technika3 + + static func makeSection(bySeries series: Series, section: String) -> MissionSectionType? { + switch series { + case .respect: + return MissionSection.Respect(rawValue: section) + case .trilogy: + return MissionSection.Trilogy(rawValue: section) + case .ce: + return MissionSection.CE(rawValue: section) + case .technika1: + return MissionSection.Technika1(rawValue: section) + case .bs: + return MissionSection.BS(rawValue: section) + case .technika2: + return MissionSection.Technika2(rawValue: section) + case .technika3: + return MissionSection.Technika3(rawValue: section) + default: + return nil + } } } diff --git a/RespectU/Sources/Common/Note.swift b/RespectU/Sources/Common/Note.swift index 78b7aad..625fb62 100644 --- a/RespectU/Sources/Common/Note.swift +++ b/RespectU/Sources/Common/Note.swift @@ -31,11 +31,6 @@ enum Note: String { return nil } } -} - -// MARK: - Extension - -extension Note { /// Expanded string. /// diff --git a/RespectU/Sources/Common/Rank.swift b/RespectU/Sources/Common/Rank.swift index 5133ac4..d54021f 100644 --- a/RespectU/Sources/Common/Rank.swift +++ b/RespectU/Sources/Common/Rank.swift @@ -20,4 +20,7 @@ enum Rank: String { /// C Rank. case c + + /// None. + case none = "" } diff --git a/RespectU/Sources/Common/SearchRecordDetail.swift b/RespectU/Sources/Common/SearchRecordDetail.swift index c8427a5..93b8f89 100644 --- a/RespectU/Sources/Common/SearchRecordDetail.swift +++ b/RespectU/Sources/Common/SearchRecordDetail.swift @@ -8,13 +8,18 @@ import Foundation +/// The `struct` using in search record detail. struct SearchRecordDetail { + /// The series string value. let series: String + /// The title. let title: String + /// The difficulty string value. let difficulty: String + /// The rating double value. let rate: Double } diff --git a/RespectU/Sources/Extension/CAGradientLayer+.swift b/RespectU/Sources/Extension/CAGradientLayer+.swift index 3a12524..8a8b575 100644 --- a/RespectU/Sources/Extension/CAGradientLayer+.swift +++ b/RespectU/Sources/Extension/CAGradientLayer+.swift @@ -19,15 +19,33 @@ extension CAGradientLayer { /// - locations: The locations of a gradient layer. /// /// - Returns: The gradient layer. - static func make(startPoint: CGPoint, +// static func make(startPoint: CGPoint, +// endPoint: CGPoint, +// colors: [CGColor], +// locations: [NSNumber]) -> CAGradientLayer { +// let gradient = CAGradientLayer() +// gradient.startPoint = startPoint +// gradient.endPoint = endPoint +// gradient.colors = colors +// gradient.locations = locations +// return gradient +// } + + /// Initializes the gradient layer. + /// + /// - Parameters: + /// - startPoint: The start point of a gradient layer. + /// - endPoint: The end point of a gradient layer. + /// - colors: The colors of a gradient layer. + /// - locations: The locations of a gradient layer. + convenience init(startPoint: CGPoint, endPoint: CGPoint, colors: [CGColor], - locations: [NSNumber]) -> CAGradientLayer { - let gradient = CAGradientLayer() - gradient.startPoint = startPoint - gradient.endPoint = endPoint - gradient.colors = colors - gradient.locations = locations - return gradient + locations: [NSNumber]) { + self.init() + self.startPoint = startPoint + self.endPoint = endPoint + self.colors = colors + self.locations = locations } } diff --git a/RespectU/Sources/Extension/MissionSection.BS+Gradient.swift b/RespectU/Sources/Extension/MissionSection.BS+Gradient.swift index 5ddb50b..e420cde 100644 --- a/RespectU/Sources/Extension/MissionSection.BS+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.BS+Gradient.swift @@ -19,17 +19,18 @@ extension MissionSection.BS { func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { let startPoint = direction.startPoint let endPoint = direction.endPoint + let locations: [NSNumber] = [0, 0.5, 1] switch self { case .stylishPerformance: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.3411764706, green: 0.6274509804, blue: 0.9215686275, alpha: 1), #colorLiteral(red: 0.09803921569, green: 0.262745098, blue: 0.6784313725, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.3411764706, green: 0.6274509804, blue: 0.9215686275, alpha: 1), #colorLiteral(red: 0.09803921569, green: 0.262745098, blue: 0.6784313725, alpha: 1)], + locations: locations) case .absoluteSound: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.8588235294, green: 0.2078431373, blue: 0.5960784314, alpha: 1), #colorLiteral(red: 0.3960784314, green: 0.05490196078, blue: 0.1960784314, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.8588235294, green: 0.2078431373, blue: 0.5960784314, alpha: 1), #colorLiteral(red: 0.3960784314, green: 0.05490196078, blue: 0.1960784314, alpha: 1)], + locations: locations) } } } diff --git a/RespectU/Sources/Extension/MissionSection.CE+Gradient.swift b/RespectU/Sources/Extension/MissionSection.CE+Gradient.swift index 14ba729..682f790 100644 --- a/RespectU/Sources/Extension/MissionSection.CE+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.CE+Gradient.swift @@ -19,17 +19,18 @@ extension MissionSection.CE { func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { let startPoint = direction.startPoint let endPoint = direction.endPoint + let locations: [NSNumber] = [0, 0.5, 1] switch self { case .electronicCity: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.2509803922, green: 0.2352941176, blue: 0.1960784314, alpha: 1), #colorLiteral(red: 0.8352941176, green: 0.7254901961, blue: 0.2235294118, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.2509803922, green: 0.2352941176, blue: 0.1960784314, alpha: 1), #colorLiteral(red: 0.8352941176, green: 0.7254901961, blue: 0.2235294118, alpha: 1)], + locations: locations) case .metropolis: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.9254901961, green: 0.6980392157, blue: 0.2509803922, alpha: 1), #colorLiteral(red: 0.6274509804, green: 0.4784313725, blue: 0.7450980392, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.9254901961, green: 0.6980392157, blue: 0.2509803922, alpha: 1), #colorLiteral(red: 0.6274509804, green: 0.4784313725, blue: 0.7450980392, alpha: 1)], + locations: locations) } } } diff --git a/RespectU/Sources/Extension/MissionSection.LinkDisk+Gradient.swift b/RespectU/Sources/Extension/MissionSection.LinkDisk+Gradient.swift index 8a9804b..18de9a7 100644 --- a/RespectU/Sources/Extension/MissionSection.LinkDisk+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.LinkDisk+Gradient.swift @@ -19,17 +19,18 @@ extension MissionSection.LinkDisk { func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { let startPoint = direction.startPoint let endPoint = direction.endPoint + let locations: [NSNumber] = [0, 0.5, 1] switch self { case .whiteDisk: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.6549019608, green: 0.03529411765, blue: 0.06274509804, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.7960784314, blue: 0.8117647059, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.6549019608, green: 0.03529411765, blue: 0.06274509804, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.7960784314, blue: 0.8117647059, alpha: 1)], + locations: locations) case .blackDisk: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.1333333333, green: 0.1176470588, blue: 0.1098039216, alpha: 1), #colorLiteral(red: 0.5921568627, green: 0.5411764706, blue: 0.3843137255, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.1333333333, green: 0.1176470588, blue: 0.1098039216, alpha: 1), #colorLiteral(red: 0.5921568627, green: 0.5411764706, blue: 0.3843137255, alpha: 1)], + locations: locations) } } } diff --git a/RespectU/Sources/Extension/MissionSection.Respect+Gradient.swift b/RespectU/Sources/Extension/MissionSection.Respect+Gradient.swift index 253772e..3d0a490 100644 --- a/RespectU/Sources/Extension/MissionSection.Respect+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.Respect+Gradient.swift @@ -19,57 +19,58 @@ extension MissionSection.Respect { func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { let startPoint = direction.startPoint let endPoint = direction.endPoint + let locations: [NSNumber] = [0, 0.5, 1] switch self { case .departure: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.137254902, green: 0.6549019608, blue: 0.3921568627, alpha: 1), #colorLiteral(red: 0.2431372549, green: 0.8235294118, blue: 0.8274509804, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.137254902, green: 0.6549019608, blue: 0.3921568627, alpha: 1), #colorLiteral(red: 0.2431372549, green: 0.8235294118, blue: 0.8274509804, alpha: 1)], + locations: locations) case .clubRoad645: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.1568627451, green: 0.6431372549, blue: 0.7725490196, alpha: 1), #colorLiteral(red: 0.2352941176, green: 0.8235294118, blue: 0.8, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.1568627451, green: 0.6431372549, blue: 0.7725490196, alpha: 1), #colorLiteral(red: 0.2352941176, green: 0.8235294118, blue: 0.8, alpha: 1)], + locations: locations) case .maxTheater: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.5176470588, green: 0.737254902, blue: 0.5019607843, alpha: 1), #colorLiteral(red: 0.2941176471, green: 0.7137254902, blue: 0.9176470588, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.5176470588, green: 0.737254902, blue: 0.5019607843, alpha: 1), #colorLiteral(red: 0.2941176471, green: 0.7137254902, blue: 0.9176470588, alpha: 1)], + locations: locations) case .anotherWorld: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.2156862745, green: 0.6392156863, blue: 0.7098039216, alpha: 1), #colorLiteral(red: 0.3215686275, green: 0.537254902, blue: 0.9333333333, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.2156862745, green: 0.6392156863, blue: 0.7098039216, alpha: 1), #colorLiteral(red: 0.3215686275, green: 0.537254902, blue: 0.9333333333, alpha: 1)], + locations: locations) case .backStage: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.631372549, green: 0.4117647059, blue: 0.9254901961, alpha: 1), #colorLiteral(red: 0.3450980392, green: 0.431372549, blue: 0.937254902, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.631372549, green: 0.4117647059, blue: 0.9254901961, alpha: 1), #colorLiteral(red: 0.3450980392, green: 0.431372549, blue: 0.937254902, alpha: 1)], + locations: locations) case .chaosTheory: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.6705882353, green: 0.3254901961, blue: 0.7725490196, alpha: 1), #colorLiteral(red: 0.5294117647, green: 0.3647058824, blue: 0.9764705882, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.6705882353, green: 0.3254901961, blue: 0.7725490196, alpha: 1), #colorLiteral(red: 0.5294117647, green: 0.3647058824, blue: 0.9764705882, alpha: 1)], + locations: locations) case .soundLab: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.7098039216, green: 0.3294117647, blue: 0.8941176471, alpha: 1), #colorLiteral(red: 0.7568627451, green: 0.5529411765, blue: 0.3725490196, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.7098039216, green: 0.3294117647, blue: 0.8941176471, alpha: 1), #colorLiteral(red: 0.7568627451, green: 0.5529411765, blue: 0.3725490196, alpha: 1)], + locations: locations) case .visualizer: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.7294117647, green: 0.3137254902, blue: 0.9254901961, alpha: 1), #colorLiteral(red: 0.9843137255, green: 0.4078431373, blue: 0.8156862745, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.7294117647, green: 0.3137254902, blue: 0.9254901961, alpha: 1), #colorLiteral(red: 0.9843137255, green: 0.4078431373, blue: 0.8156862745, alpha: 1)], + locations: locations) case .developers: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.6392156863, green: 0.2784313725, blue: 0.6901960784, alpha: 1), #colorLiteral(red: 0.9803921569, green: 0.4470588235, blue: 0.4392156863, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.6392156863, green: 0.2784313725, blue: 0.6901960784, alpha: 1), #colorLiteral(red: 0.9803921569, green: 0.4470588235, blue: 0.4392156863, alpha: 1)], + locations: locations) case .destination: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.5921568627, green: 0.2588235294, blue: 0.2588235294, alpha: 1), #colorLiteral(red: 0.6470588235, green: 0.06274509804, blue: 0.1803921569, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.5921568627, green: 0.2588235294, blue: 0.2588235294, alpha: 1), #colorLiteral(red: 0.6470588235, green: 0.06274509804, blue: 0.1803921569, alpha: 1)], + locations: locations) } } } diff --git a/RespectU/Sources/Extension/MissionSection.Technika1+Gradient.swift b/RespectU/Sources/Extension/MissionSection.Technika1+Gradient.swift index ec5affe..91e415e 100644 --- a/RespectU/Sources/Extension/MissionSection.Technika1+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.Technika1+Gradient.swift @@ -19,17 +19,18 @@ extension MissionSection.Technika1 { func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { let startPoint = direction.startPoint let endPoint = direction.endPoint + let locations: [NSNumber] = [0, 0.5, 1] switch self { case .platinumMixing: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.09803921569, green: 0.1882352941, blue: 0.2980392157, alpha: 1), #colorLiteral(red: 0.5490196078, green: 0.6862745098, blue: 0.7921568627, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.09803921569, green: 0.1882352941, blue: 0.2980392157, alpha: 1), #colorLiteral(red: 0.5490196078, green: 0.6862745098, blue: 0.7921568627, alpha: 1)], + locations: locations) case .technicalMixing: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.4, green: 0.07450980392, blue: 0.3803921569, alpha: 1), #colorLiteral(red: 0.8705882353, green: 0.2039215686, blue: 0.6392156863, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.4, green: 0.07450980392, blue: 0.3803921569, alpha: 1), #colorLiteral(red: 0.8705882353, green: 0.2039215686, blue: 0.6392156863, alpha: 1)], + locations: locations) } } } diff --git a/RespectU/Sources/Extension/MissionSection.Technika2+Gradient.swift b/RespectU/Sources/Extension/MissionSection.Technika2+Gradient.swift index e212aca..205a138 100644 --- a/RespectU/Sources/Extension/MissionSection.Technika2+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.Technika2+Gradient.swift @@ -21,15 +21,15 @@ extension MissionSection.Technika2 { let endPoint = direction.endPoint switch self { case .starMixing: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.537254902, green: 0.07058823529, blue: 0.5058823529, alpha: 1), #colorLiteral(red: 0.1058823529, green: 0.3882352941, blue: 0.6392156863, alpha: 1), #colorLiteral(red: 0.2470588235, green: 0.6588235294, blue: 0.1921568627, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.7333333333, blue: 0.1843137255, alpha: 1)], - locations: [0, 0.25, 0.5, 0.75, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.537254902, green: 0.07058823529, blue: 0.5058823529, alpha: 1), #colorLiteral(red: 0.1058823529, green: 0.3882352941, blue: 0.6392156863, alpha: 1), #colorLiteral(red: 0.2470588235, green: 0.6588235294, blue: 0.1921568627, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.7333333333, blue: 0.1843137255, alpha: 1)], + locations: [0, 0.25, 0.5, 0.75, 1]) case .clubMixing: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.07843137255, green: 0.2470588235, blue: 0.6705882353, alpha: 1), #colorLiteral(red: 0.9843137255, green: 0.7960784314, blue: 0.1882352941, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.07843137255, green: 0.2470588235, blue: 0.6705882353, alpha: 1), #colorLiteral(red: 0.9843137255, green: 0.7960784314, blue: 0.1882352941, alpha: 1)], + locations: [0, 0.5, 1]) } } } diff --git a/RespectU/Sources/Extension/MissionSection.Trilogy+Gradient.swift b/RespectU/Sources/Extension/MissionSection.Trilogy+Gradient.swift index a88a8db..05adca0 100644 --- a/RespectU/Sources/Extension/MissionSection.Trilogy+Gradient.swift +++ b/RespectU/Sources/Extension/MissionSection.Trilogy+Gradient.swift @@ -19,17 +19,18 @@ extension MissionSection.Trilogy { func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { let startPoint = direction.startPoint let endPoint = direction.endPoint + let locations: [NSNumber] = [0, 0.5, 1] switch self { case .tSide: - return CAGradientLayer.make(startPoint: startPoint, + return CAGradientLayer(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.2980392157, green: 0.337254902, blue: 0.9843137255, alpha: 1), #colorLiteral(red: 0.4, green: 0.6980392157, blue: 0.9764705882, alpha: 1)], - locations: [0, 0.5, 1]) + locations: locations) case .rSide: - return CAGradientLayer.make(startPoint: startPoint, + return CAGradientLayer(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.2941176471, green: 0.337254902, blue: 0.9843137255, alpha: 1), #colorLiteral(red: 0.5882352941, green: 0.4352941176, blue: 0.9568627451, alpha: 1)], - locations: [0, 0.5, 1]) + locations: locations) } } diff --git a/RespectU/Sources/Extension/Series+UI.swift b/RespectU/Sources/Extension/Series+UI.swift index e3bd080..eca834d 100644 --- a/RespectU/Sources/Extension/Series+UI.swift +++ b/RespectU/Sources/Extension/Series+UI.swift @@ -11,8 +11,6 @@ import UIKit extension Series { - // MARK: Property - /// The color of each series. var color: UIColor? { switch self { @@ -39,11 +37,9 @@ extension Series { } } - // MARK: Method - - /// Creates `CAGradientLayer` matching each series. + /// Creates `CAGradientLayer` matching each series in `direction`. /// - /// - Parameter direction: The direction of gradient layer. + /// - Parameter direction: The direction of the created gradient layer. /// /// - Returns: The created `CAGradientLayer`. func makeGradient(by direction: GradientDirection) -> CAGradientLayer? { @@ -51,45 +47,45 @@ extension Series { let endPoint = direction.endPoint switch self { case .portable1: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.1215686275, green: 0.7098039216, blue: 0.8784313725, alpha: 1), #colorLiteral(red: 0.7254901961, green: 0.2823529412, blue: 0.9764705882, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.1215686275, green: 0.7098039216, blue: 0.8784313725, alpha: 1), #colorLiteral(red: 0.7254901961, green: 0.2823529412, blue: 0.9764705882, alpha: 1)], + locations: [0, 0.5, 1]) case .portable2: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.9882352941, green: 0.1254901961, blue: 0.2784313725, alpha: 1), #colorLiteral(red: 0.9882352941, green: 0.2156862745, blue: 0.6705882353, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.9882352941, green: 0.1254901961, blue: 0.2784313725, alpha: 1), #colorLiteral(red: 0.9882352941, green: 0.2156862745, blue: 0.6705882353, alpha: 1)], + locations: [0, 0.5, 1]) case .respect: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.9607843137, green: 0.6745098039, blue: 0.1647058824, alpha: 1), #colorLiteral(red: 0.9803921569, green: 0.3921568627, blue: 0.4941176471, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.9607843137, green: 0.6745098039, blue: 0.1647058824, alpha: 1), #colorLiteral(red: 0.9803921569, green: 0.3921568627, blue: 0.4941176471, alpha: 1)], + locations: [0, 0.5, 1]) case .trilogy: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.3176470588, green: 0.4784313725, blue: 0.9725490196, alpha: 1), #colorLiteral(red: 0.3803921569, green: 0.9019607843, blue: 0.9725490196, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.3176470588, green: 0.4784313725, blue: 0.9725490196, alpha: 1), #colorLiteral(red: 0.3803921569, green: 0.9019607843, blue: 0.9725490196, alpha: 1)], + locations: [0, 0.5, 1]) case .ce: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1), #colorLiteral(red: 0.9568627451, green: 0.831372549, blue: 0.3254901961, alpha: 1), #colorLiteral(red: 0.6039215686, green: 0.4941176471, blue: 0.1333333333, alpha: 1), #colorLiteral(red: 0.7764705882, green: 0.5921568627, blue: 0.2509803922, alpha: 1)], - locations: [0, 0.7, 0.8, 0.9, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1), #colorLiteral(red: 0.9568627451, green: 0.831372549, blue: 0.3254901961, alpha: 1), #colorLiteral(red: 0.6039215686, green: 0.4941176471, blue: 0.1333333333, alpha: 1), #colorLiteral(red: 0.7764705882, green: 0.5921568627, blue: 0.2509803922, alpha: 1)], + locations: [0, 0.7, 0.8, 0.9, 1]) case .technika1: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.5019607843, green: 0.4, blue: 0.8666666667, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.1058823529, blue: 0.5921568627, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.5019607843, green: 0.4, blue: 0.8666666667, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.1058823529, blue: 0.5921568627, alpha: 1)], + locations: [0, 0.5, 1]) case .bs: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.8941176471, green: 0.06274509804, blue: 0.2901960784, alpha: 1), #colorLiteral(red: 0.4823529412, green: 0.09803921569, blue: 0.168627451, alpha: 1)], - locations: [0, 0.5, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.8941176471, green: 0.06274509804, blue: 0.2901960784, alpha: 1), #colorLiteral(red: 0.4823529412, green: 0.09803921569, blue: 0.168627451, alpha: 1)], + locations: [0, 0.5, 1]) case .technika2: - return CAGradientLayer.make(startPoint: startPoint, - endPoint: endPoint, - colors: [#colorLiteral(red: 0.9647058824, green: 0.1411764706, blue: 0.8784313725, alpha: 1), #colorLiteral(red: 0.9882352941, green: 0.4235294118, blue: 0.1333333333, alpha: 1), #colorLiteral(red: 0.9960784314, green: 0.768627451, blue: 0.1764705882, alpha: 1), #colorLiteral(red: 0.337254902, green: 0.8156862745, blue: 0.5058823529, alpha: 1), #colorLiteral(red: 0.1411764706, green: 0.8274509804, blue: 0.9921568627, alpha: 1)], - locations: [0, 0.2, 0.4, 0.6, 0.8, 1]) + return CAGradientLayer(startPoint: startPoint, + endPoint: endPoint, + colors: [#colorLiteral(red: 0.9647058824, green: 0.1411764706, blue: 0.8784313725, alpha: 1), #colorLiteral(red: 0.9882352941, green: 0.4235294118, blue: 0.1333333333, alpha: 1), #colorLiteral(red: 0.9960784314, green: 0.768627451, blue: 0.1764705882, alpha: 1), #colorLiteral(red: 0.337254902, green: 0.8156862745, blue: 0.5058823529, alpha: 1), #colorLiteral(red: 0.1411764706, green: 0.8274509804, blue: 0.9921568627, alpha: 1)], + locations: [0, 0.2, 0.4, 0.6, 0.8, 1]) case .technika3: return nil case .linkDisk: diff --git a/RespectU/Sources/Extension/String+.swift b/RespectU/Sources/Extension/String+.swift index 9ad2810..3573f9d 100644 --- a/RespectU/Sources/Extension/String+.swift +++ b/RespectU/Sources/Extension/String+.swift @@ -14,57 +14,4 @@ extension String { var localized: String { return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "") } - -// func missionGradient(_ direction: GradientDirection) -> CAGradientLayer? { -// let startPoint = direction == .horizontal ? CGPoint(x: 0, y: 0.5) : CGPoint(x: 0.5, y: 0) -// let endPoint = direction == .horizontal ? CGPoint(x: 1, y: 0.5) : CGPoint(x: 0.5, y: 1) -// switch self { -// case MissionSection.Respect.departure: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.137254902, green: 0.6549019608, blue: 0.3921568627, alpha: 1), #colorLiteral(red: 0.2431372549, green: 0.8235294118, blue: 0.8274509804, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.clubRoad645: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.1568627451, green: 0.6431372549, blue: 0.7725490196, alpha: 1), #colorLiteral(red: 0.2352941176, green: 0.8235294118, blue: 0.8, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.maxTheater: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.5176470588, green: 0.737254902, blue: 0.5019607843, alpha: 1), #colorLiteral(red: 0.2941176471, green: 0.7137254902, blue: 0.9176470588, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.anotherWorld: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.2156862745, green: 0.6392156863, blue: 0.7098039216, alpha: 1), #colorLiteral(red: 0.3215686275, green: 0.537254902, blue: 0.9333333333, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.backStage: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.631372549, green: 0.4117647059, blue: 0.9254901961, alpha: 1), #colorLiteral(red: 0.3450980392, green: 0.431372549, blue: 0.937254902, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.chaosTheory: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.6705882353, green: 0.3254901961, blue: 0.7725490196, alpha: 1), #colorLiteral(red: 0.5294117647, green: 0.3647058824, blue: 0.9764705882, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.soundLab: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.7098039216, green: 0.3294117647, blue: 0.8941176471, alpha: 1), #colorLiteral(red: 0.7568627451, green: 0.5529411765, blue: 0.3725490196, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.visualizer: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.7294117647, green: 0.3137254902, blue: 0.9254901961, alpha: 1), #colorLiteral(red: 0.9843137255, green: 0.4078431373, blue: 0.8156862745, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.developers: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.6392156863, green: 0.2784313725, blue: 0.6901960784, alpha: 1), #colorLiteral(red: 0.9803921569, green: 0.4470588235, blue: 0.4392156863, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Respect.destination: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.5921568627, green: 0.2588235294, blue: 0.2588235294, alpha: 1), #colorLiteral(red: 0.6470588235, green: 0.06274509804, blue: 0.1803921569, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Trilogy.tSide: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.2980392157, green: 0.337254902, blue: 0.9843137255, alpha: 1), #colorLiteral(red: 0.4, green: 0.6980392157, blue: 0.9764705882, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Trilogy.rSide: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.2941176471, green: 0.337254902, blue: 0.9843137255, alpha: 1), #colorLiteral(red: 0.5882352941, green: 0.4352941176, blue: 0.9568627451, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.CE.electronicCity: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.2509803922, green: 0.2352941176, blue: 0.1960784314, alpha: 1), #colorLiteral(red: 0.8352941176, green: 0.7254901961, blue: 0.2235294118, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.CE.metropolis: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.9254901961, green: 0.6980392157, blue: 0.2509803922, alpha: 1), #colorLiteral(red: 0.6274509804, green: 0.4784313725, blue: 0.7450980392, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Technika1.platinumMixing: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.09803921569, green: 0.1882352941, blue: 0.2980392157, alpha: 1), #colorLiteral(red: 0.5490196078, green: 0.6862745098, blue: 0.7921568627, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Technika1.technicalMixing: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.4, green: 0.07450980392, blue: 0.3803921569, alpha: 1), #colorLiteral(red: 0.8705882353, green: 0.2039215686, blue: 0.6392156863, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.BS.stylishPerformance: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.3411764706, green: 0.6274509804, blue: 0.9215686275, alpha: 1), #colorLiteral(red: 0.09803921569, green: 0.262745098, blue: 0.6784313725, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.BS.absoluteSound: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.8588235294, green: 0.2078431373, blue: 0.5960784314, alpha: 1), #colorLiteral(red: 0.3960784314, green: 0.05490196078, blue: 0.1960784314, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.LinkDisk.whiteDisk: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.6549019608, green: 0.03529411765, blue: 0.06274509804, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.7960784314, blue: 0.8117647059, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.LinkDisk.blackDisk: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.1333333333, green: 0.1176470588, blue: 0.1098039216, alpha: 1), #colorLiteral(red: 0.5921568627, green: 0.5411764706, blue: 0.3843137255, alpha: 1)], locations: [0, 0.5, 1]) -// case MissionSection.Technika2.starMixing: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.537254902, green: 0.07058823529, blue: 0.5058823529, alpha: 1), #colorLiteral(red: 0.1058823529, green: 0.3882352941, blue: 0.6392156863, alpha: 1), #colorLiteral(red: 0.2470588235, green: 0.6588235294, blue: 0.1921568627, alpha: 1), #colorLiteral(red: 0.9333333333, green: 0.7333333333, blue: 0.1843137255, alpha: 1)], locations: [0, 0.25, 0.5, 0.75, 1]) -// case MissionSection.Technika2.clubMixing: -// return CAGradientLayer.makeGradient(startPoint: startPoint, endPoint: endPoint, colors: [#colorLiteral(red: 0.07843137255, green: 0.2470588235, blue: 0.6705882353, alpha: 1), #colorLiteral(red: 0.9843137255, green: 0.7960784314, blue: 0.1882352941, alpha: 1)], locations: [0, 0.5, 1]) -// default: -// return nil -// } -// } } diff --git a/RespectU/Sources/Extension/UIColor+.swift b/RespectU/Sources/Extension/UIColor+.swift index f7ff021..c950c23 100644 --- a/RespectU/Sources/Extension/UIColor+.swift +++ b/RespectU/Sources/Extension/UIColor+.swift @@ -50,6 +50,78 @@ extension UIColor { /// The color representing TECHNIKA 3 series. static let technika3: UIColor = Asset.technika3.color + // MARK: Mission Color + + /// The color representing Departure section in RESPECT series. + static let departure: UIColor = Asset.departure.color + + /// The color representing CLUB Road645 section in RESPECT series. + static let clubRoad645: UIColor = Asset.clubRoad645.color + + /// The color representing MAX Theater section in RESPECT series. + static let maxTheater: UIColor = Asset.maxTheater.color + + /// The color representing Another WORLD section in RESPECT series. + static let anotherWorld: UIColor = Asset.anotherWorld.color + + /// The color representing Back STAGE section in RESPECT series. + static let backStage: UIColor = Asset.backStage.color + + /// The color representing Chaos theory section in RESPECT series. + static let chaosTheory: UIColor = Asset.chaosTheory.color + + /// The color representing Sound Lab section in RESPECT series. + static let soundLab: UIColor = Asset.soundLab.color + + /// The color representing Visualizer section in RESPECT series. + static let visualizer: UIColor = Asset.visualizer.color + + /// The color representing D-VELOPERS section in RESPECT series. + static let developers: UIColor = Asset.developers.color + + /// The color representing Destination section in RESPECT series. + static let destination: UIColor = Asset.destination.color + + /// The color representing T-SIDE section in TRILOGY series. + static let tSide: UIColor = Asset.tSide.color + + /// The color representing R-SIDE section in TRILOGY series. + static let rSide: UIColor = Asset.rSide.color + + /// The color representing Electronic City section in CLAZZIQUAI EDITION series. + static let electronicCity: UIColor = Asset.electronicCity.color + + /// The color representing Metropolis section in CLAZZIQUAI EDITION series. + static let metropolis: UIColor = Asset.metropolis.color + + /// The color representing Platinum Mixing section in TECHNIKA 1 series. + static let platinumMixing: UIColor = Asset.platinumMixing.color + + /// The color representing Technical Mixing section in TECHNIKA 1 series. + static let technicalMixing: UIColor = Asset.technicalMixing.color + + /// The color representing Stylish Performance section in BLACK SQUARE series. + static let stylishPerformance: UIColor = Asset.stylishPerformance.color + + /// The color representing Absolute Sound section in BLACK SQUARE series. + static let absoluteSound: UIColor = Asset.absoluteSound.color + + /// The color representing STAR MIXING section in TECHNIKA 2 series. + static let starMixing: UIColor = Asset.starMixing.color + + /// The color representing CLUB MIXING section in TECHNIKA 2 series. + static let clubMixing: UIColor = Asset.clubMixing.color + + /// The color representing WHITE DISK section in LINK DISK series. + static let whiteDisk: UIColor = Asset.whiteDisk.color + + /// The color representing BLACK DISK section in LINK DISK series. + static let blackDisk: UIColor = Asset.blackDisk.color + + static let popMixing: UIColor = Asset.popMixing.color + + static let crewChallenge: UIColor = Asset.crewChallenge.color + // MARK: Trophy Color /// The color of PLATINUM trophy. diff --git a/RespectU/Sources/Extension/UITableViewCell+.swift b/RespectU/Sources/Extension/UITableViewCell+.swift index d715aec..9fa4fa0 100644 --- a/RespectU/Sources/Extension/UITableViewCell+.swift +++ b/RespectU/Sources/Extension/UITableViewCell+.swift @@ -10,70 +10,70 @@ import UIKit extension UITableViewCell { - func setColorsInMission(_ series: String, labels: [UILabel]) { - DispatchQueue.main.async { [unowned self] in - switch series { - case MissionSection.Respect.departure: - self.contentView.backgroundColor = #colorLiteral(red: 0.3058823529, green: 0.9058823529, blue: 0.7450980392, alpha: 1) - case MissionSection.Respect.clubRoad645: - self.contentView.backgroundColor = #colorLiteral(red: 0.337254902, green: 0.8470588235, blue: 0.9568627451, alpha: 1) - case MissionSection.Respect.maxTheater: - self.contentView.backgroundColor = #colorLiteral(red: 0.3098039216, green: 0.6980392157, blue: 0.9098039216, alpha: 1) - case MissionSection.Respect.anotherWorld: - self.contentView.backgroundColor = #colorLiteral(red: 0.4431372549, green: 0.5882352941, blue: 0.8705882353, alpha: 1) - case MissionSection.Respect.backStage: - self.contentView.backgroundColor = #colorLiteral(red: 0.7058823529, green: 0.6274509804, blue: 0.9215686275, alpha: 1) - case MissionSection.Respect.chaosTheory: - self.contentView.backgroundColor = #colorLiteral(red: 0.7019607843, green: 0.5490196078, blue: 0.8980392157, alpha: 1) - case MissionSection.Respect.soundLab: - self.contentView.backgroundColor = #colorLiteral(red: 0.831372549, green: 0.4705882353, blue: 0.937254902, alpha: 1) - case MissionSection.Respect.visualizer: - self.contentView.backgroundColor = #colorLiteral(red: 0.8941176471, green: 0.4745098039, blue: 0.9019607843, alpha: 1) - case MissionSection.Respect.developers: - self.contentView.backgroundColor = #colorLiteral(red: 0.9607843137, green: 0.3333333333, blue: 0.6549019608, alpha: 1) - case MissionSection.Respect.destination: - self.contentView.backgroundColor = #colorLiteral(red: 0.7960784314, green: 0.2862745098, blue: 0.3882352941, alpha: 1) - case MissionSection.Trilogy.tSide: - self.contentView.backgroundColor = #colorLiteral(red: 0.5607843137, green: 0.6784313725, blue: 0.831372549, alpha: 1) - case MissionSection.Trilogy.rSide: - self.contentView.backgroundColor = #colorLiteral(red: 0.662745098, green: 0.5803921569, blue: 0.8705882353, alpha: 1) - case MissionSection.CE.electronicCity: - self.contentView.backgroundColor = #colorLiteral(red: 0.8862745098, green: 0.8745098039, blue: 0.4431372549, alpha: 1) - case MissionSection.CE.metropolis: - self.contentView.backgroundColor = #colorLiteral(red: 0.7137254902, green: 0.631372549, blue: 0.8039215686, alpha: 1) - case MissionSection.Technika1.platinumMixing: - self.contentView.backgroundColor = #colorLiteral(red: 0.7137254902, green: 0.8196078431, blue: 0.8980392157, alpha: 1) - case MissionSection.Technika1.technicalMixing: - self.contentView.backgroundColor = #colorLiteral(red: 0.8901960784, green: 0.6, blue: 0.7803921569, alpha: 1) - case MissionSection.BS.stylishPerformance: - self.contentView.backgroundColor = #colorLiteral(red: 0.4980392157, green: 0.6274509804, blue: 0.8156862745, alpha: 1) - case MissionSection.BS.absoluteSound: - self.contentView.backgroundColor = #colorLiteral(red: 0.8039215686, green: 0.5019607843, blue: 0.6196078431, alpha: 1) - case MissionSection.LinkDisk.whiteDisk: - self.contentView.backgroundColor = #colorLiteral(red: 0.7058823529, green: 0.431372549, blue: 0.4745098039, alpha: 1) - case MissionSection.LinkDisk.blackDisk: - self.contentView.backgroundColor = #colorLiteral(red: 0.6392156863, green: 0.6, blue: 0.4196078431, alpha: 1) - case MissionSection.Technika2.starMixing: - self.contentView.backgroundColor = #colorLiteral(red: 0.7803921569, green: 0.6980392157, blue: 0.3647058824, alpha: 1) - case MissionSection.Technika2.clubMixing: - self.contentView.backgroundColor = #colorLiteral(red: 0.7803921569, green: 0.6980392157, blue: 0.3647058824, alpha: 1) - default: - self.contentView.backgroundColor = .clear - } - self.setColors(of: labels, to: .white) - } - } - - func unsetColors(labels: [UILabel]) { - DispatchQueue.main.async { [weak self] in - self?.contentView.backgroundColor = .white - self?.setColors(of: labels, to: .black) - } - } - - private func setColors(of labels: [UILabel], to color: UIColor) { - for label in labels { - label.textColor = color - } - } +// func setColorsInMission(_ series: String, labels: [UILabel]) { +// DispatchQueue.main.async { [unowned self] in +// switch series { +// case MissionSection.Respect.departure: +// self.contentView.backgroundColor = #colorLiteral(red: 0.3058823529, green: 0.9058823529, blue: 0.7450980392, alpha: 1) +// case MissionSection.Respect.clubRoad645: +// self.contentView.backgroundColor = #colorLiteral(red: 0.337254902, green: 0.8470588235, blue: 0.9568627451, alpha: 1) +// case MissionSection.Respect.maxTheater: +// self.contentView.backgroundColor = #colorLiteral(red: 0.3098039216, green: 0.6980392157, blue: 0.9098039216, alpha: 1) +// case MissionSection.Respect.anotherWorld: +// self.contentView.backgroundColor = #colorLiteral(red: 0.4431372549, green: 0.5882352941, blue: 0.8705882353, alpha: 1) +// case MissionSection.Respect.backStage: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7058823529, green: 0.6274509804, blue: 0.9215686275, alpha: 1) +// case MissionSection.Respect.chaosTheory: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7019607843, green: 0.5490196078, blue: 0.8980392157, alpha: 1) +// case MissionSection.Respect.soundLab: +// self.contentView.backgroundColor = #colorLiteral(red: 0.831372549, green: 0.4705882353, blue: 0.937254902, alpha: 1) +// case MissionSection.Respect.visualizer: +// self.contentView.backgroundColor = #colorLiteral(red: 0.8941176471, green: 0.4745098039, blue: 0.9019607843, alpha: 1) +// case MissionSection.Respect.developers: +// self.contentView.backgroundColor = #colorLiteral(red: 0.9607843137, green: 0.3333333333, blue: 0.6549019608, alpha: 1) +// case MissionSection.Respect.destination: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7960784314, green: 0.2862745098, blue: 0.3882352941, alpha: 1) +// case MissionSection.Trilogy.tSide: +// self.contentView.backgroundColor = #colorLiteral(red: 0.5607843137, green: 0.6784313725, blue: 0.831372549, alpha: 1) +// case MissionSection.Trilogy.rSide: +// self.contentView.backgroundColor = #colorLiteral(red: 0.662745098, green: 0.5803921569, blue: 0.8705882353, alpha: 1) +// case MissionSection.CE.electronicCity: +// self.contentView.backgroundColor = #colorLiteral(red: 0.8862745098, green: 0.8745098039, blue: 0.4431372549, alpha: 1) +// case MissionSection.CE.metropolis: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7137254902, green: 0.631372549, blue: 0.8039215686, alpha: 1) +// case MissionSection.Technika1.platinumMixing: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7137254902, green: 0.8196078431, blue: 0.8980392157, alpha: 1) +// case MissionSection.Technika1.technicalMixing: +// self.contentView.backgroundColor = #colorLiteral(red: 0.8901960784, green: 0.6, blue: 0.7803921569, alpha: 1) +// case MissionSection.BS.stylishPerformance: +// self.contentView.backgroundColor = #colorLiteral(red: 0.4980392157, green: 0.6274509804, blue: 0.8156862745, alpha: 1) +// case MissionSection.BS.absoluteSound: +// self.contentView.backgroundColor = #colorLiteral(red: 0.8039215686, green: 0.5019607843, blue: 0.6196078431, alpha: 1) +// case MissionSection.LinkDisk.whiteDisk: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7058823529, green: 0.431372549, blue: 0.4745098039, alpha: 1) +// case MissionSection.LinkDisk.blackDisk: +// self.contentView.backgroundColor = #colorLiteral(red: 0.6392156863, green: 0.6, blue: 0.4196078431, alpha: 1) +// case MissionSection.Technika2.starMixing: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7803921569, green: 0.6980392157, blue: 0.3647058824, alpha: 1) +// case MissionSection.Technika2.clubMixing: +// self.contentView.backgroundColor = #colorLiteral(red: 0.7803921569, green: 0.6980392157, blue: 0.3647058824, alpha: 1) +// default: +// self.contentView.backgroundColor = .clear +// } +// self.setColors(of: labels, to: .white) +// } +// } +// +// func unsetColors(labels: [UILabel]) { +// DispatchQueue.main.async { [weak self] in +// self?.contentView.backgroundColor = .white +// self?.setColors(of: labels, to: .black) +// } +// } +// +// private func setColors(of labels: [UILabel], to color: UIColor) { +// for label in labels { +// label.textColor = color +// } +// } } diff --git a/RespectU/Sources/Models/Realm/AchievementInfo.swift b/RespectU/Sources/Models/Realm/AchievementInfo.swift index d7a0869..8ff05bd 100644 --- a/RespectU/Sources/Models/Realm/AchievementInfo.swift +++ b/RespectU/Sources/Models/Realm/AchievementInfo.swift @@ -86,7 +86,8 @@ final class AchievementInfo: Object { /// - Parameters: /// - object: The source achievement information. /// - achievementInfo: The updated achievement information. - static func update(_ object: AchievementResponse.Achievement, to achievementInfo: AchievementInfo) { + static func update(_ object: AchievementResponse.Achievement, + to achievementInfo: AchievementInfo) { let realm = try! Realm() try! realm.write { achievementInfo.type = object.type diff --git a/RespectU/Sources/Models/Realm/TrophyInfo.swift b/RespectU/Sources/Models/Realm/TrophyInfo.swift index 963aa36..052dd56 100644 --- a/RespectU/Sources/Models/Realm/TrophyInfo.swift +++ b/RespectU/Sources/Models/Realm/TrophyInfo.swift @@ -68,7 +68,9 @@ final class TrophyInfo: Object { let imageURL = "\(APIService.baseURL)/images/\(trophyInfo.series)/\(trophyInfo.image).png" guard let url = URL(string: imageURL) else { return } guard let imageData = try? Data(contentsOf: url) else { return } - guard let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return } + guard let documentURL + = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first + else { return } let fileURL = documentURL.appendingPathComponent("\(trophyInfo.image).png") do { try imageData.write(to: fileURL, options: .atomic) @@ -108,7 +110,9 @@ final class TrophyInfo: Object { /// - object: The source trophy information. /// - achievementInfo: The updated trophy information. static func update(_ object: TrophyResponse.Trophy, to trophyInfo: TrophyInfo) { - guard let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return } + guard let documentURL + = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first + else { return } let fileURL = documentURL.appendingPathComponent("\(trophyInfo.image).png") do { try FileManager.default.removeItem(at: fileURL) diff --git a/RespectU/Sources/Services/APIService+Base.swift b/RespectU/Sources/Services/APIService+Base.swift index e8e0df8..fbeb1ed 100644 --- a/RespectU/Sources/Services/APIService+Base.swift +++ b/RespectU/Sources/Services/APIService+Base.swift @@ -195,6 +195,5 @@ extension APIServiceType { } } - /// The api service conforming `APIServiceType`. final class APIService: APIServiceType { } diff --git a/RespectU/Sources/Services/APIService+Ranking.swift b/RespectU/Sources/Services/APIService+Ranking.swift index 57eae4f..ad9ff1c 100644 --- a/RespectU/Sources/Services/APIService+Ranking.swift +++ b/RespectU/Sources/Services/APIService+Ranking.swift @@ -34,7 +34,7 @@ extension APIService { "button6": button6, "button8": button8 ] - networkManager.post("\(baseURL)/rankings", parameters: parameters) { data, statusCode, error in + networkManager.post("\(baseURL)/rankings", parameters: parameters) { _, statusCode, error in completion(statusCode, error) } } diff --git a/RespectU/Sources/Services/APIService+Record.swift b/RespectU/Sources/Services/APIService+Record.swift index 0a93c2b..76a4206 100644 --- a/RespectU/Sources/Services/APIService+Record.swift +++ b/RespectU/Sources/Services/APIService+Record.swift @@ -20,7 +20,7 @@ extension APIService { } func uploadRecords(_ data: Data, completion: @escaping (Int?, Error?) -> Void) { - networkManager.upload(data, to: "\(baseURL)/records") { data, statusCode, error in + networkManager.upload(data, to: "\(baseURL)/records") { _, statusCode, error in completion(statusCode, error) } } diff --git a/RespectU/Sources/Services/APIService+User.swift b/RespectU/Sources/Services/APIService+User.swift index 1ac8824..f9a41d3 100644 --- a/RespectU/Sources/Services/APIService+User.swift +++ b/RespectU/Sources/Services/APIService+User.swift @@ -17,7 +17,7 @@ extension APIService { func requestSignIn(id: String, password: String, completion: @escaping (Int?, Error?) -> Void) { let parameters = ["id": id, "password": password] networkManager - .post("\(baseURL)/users/signin", parameters: parameters) { data, statusCode, error in + .post("\(baseURL)/users/signin", parameters: parameters) { _, statusCode, error in completion(statusCode, error) } } @@ -28,7 +28,7 @@ extension APIService { completion: @escaping (Int?, Error?) -> Void) { let parameters = ["id": id, "password": password, "nickname": nickname] networkManager - .post("\(baseURL)/users/signup", parameters: parameters) { data, statusCode, error in + .post("\(baseURL)/users/signup", parameters: parameters) { _, statusCode, error in completion(statusCode, error) } } @@ -52,7 +52,7 @@ extension APIService { func uploadNickname(id: String, nickname: String, completion: @escaping (Int?, Error?) -> Void) { let parameters = ["id": id, "nickname": nickname] networkManager - .post("\(baseURL)/users/nickname", parameters: parameters) { data, statusCode, error in + .post("\(baseURL)/users/nickname", parameters: parameters) { _, statusCode, error in completion(statusCode, error) } } diff --git a/RespectU/Sources/Services/NetworkManager.swift b/RespectU/Sources/Services/NetworkManager.swift index 9002dce..e91c4c7 100644 --- a/RespectU/Sources/Services/NetworkManager.swift +++ b/RespectU/Sources/Services/NetworkManager.swift @@ -51,7 +51,7 @@ final class NetworkManager: NetworkManagerType { } func post(_ url: String, - parameters: [String : Any], + parameters: [String: Any], completion: @escaping (Data?, Int?, Error?) -> Void) { let session = URLSession(configuration: .default) guard case let url? = URL(string: url) else { return } diff --git a/RespectU/Sources/Storyboards/Record.storyboard b/RespectU/Sources/Storyboards/Record.storyboard index 9e01d85..e1cffc5 100644 --- a/RespectU/Sources/Storyboards/Record.storyboard +++ b/RespectU/Sources/Storyboards/Record.storyboard @@ -70,7 +70,6 @@ - diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementAllTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementAllTableViewController.swift index 9073a05..bfb17a4 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementAllTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementAllTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the all types. final class AchievementAllTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementAllTableViewController: AchievementBaseTableViewControlle } } +// MARK: - UITableView + extension AchievementAllTableViewController { override func tableView(_ tableView: UITableView, @@ -27,6 +30,8 @@ extension AchievementAllTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementAllTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementBaseTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementBaseTableViewController.swift index 25a276f..a2c5198 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementBaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementBaseTableViewController.swift @@ -10,12 +10,16 @@ import UIKit import RealmSwift +/// The achievement base table view controller. class AchievementBaseTableViewController: UITableViewController { + /// The fetched achievement results. var results: Results? + /// The stages by section. var stages = [Int]() + /// The cell identifier. let cellIdentifier = "achievementCell" override func viewDidLoad() { @@ -23,20 +27,20 @@ class AchievementBaseTableViewController: UITableViewController { configure() } + /// Configures initial settings. private func configure() { - tableView = UITableView(frame: tableView.bounds, style: .grouped) - tableView.rowHeight = 40 - tableView.showsVerticalScrollIndicator = false - tableView.separatorStyle = .none - tableView.register(UINib(nibName: AchievementCell.name, bundle: nil), - forCellReuseIdentifier: cellIdentifier) + tableView = UITableView(frame: tableView.bounds, style: .grouped).then { + $0.rowHeight = 40 + $0.showsVerticalScrollIndicator = false + $0.separatorStyle = .none + $0.register(UINib(nibName: AchievementCell.name, bundle: nil), + forCellReuseIdentifier: cellIdentifier) + } } -} - -extension AchievementBaseTableViewController { + /// Makes number of stages. func makeNumberOfStages() { - guard let results = self.results else { return } + guard let results = results else { return } stages.removeAll() var count = 0 var tempTitle = "" @@ -56,6 +60,12 @@ extension AchievementBaseTableViewController { stages.append(count) } + /// Makes achievement cell at `indexPath`. + /// + /// - Parameters: + /// - indexPath: The index path of the made cell. + /// - isAll: The boolean value indicating whether the type is all. + /// The default value is `false`. func makeAchievementCell(at indexPath: IndexPath, isAll: Bool = false) -> UITableViewCell { guard let cell = tableView .dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? AchievementCell @@ -67,15 +77,17 @@ extension AchievementBaseTableViewController { } } rowIndex += indexPath.row - let count = self.results?.count ?? 0 + let count = results?.count ?? 0 if rowIndex < count { - let object = self.results?[rowIndex] + let object = results?[rowIndex] cell.configure(with: object, isAll: isAll) } return cell } } +// MARK: - UITableView Configuration + extension AchievementBaseTableViewController { override func tableView(_ tableView: UITableView, @@ -84,21 +96,21 @@ extension AchievementBaseTableViewController { } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return self.stages[section] + return stages[section] } override func numberOfSections(in tableView: UITableView) -> Int { - return self.stages.count + return stages.count } override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - if section < self.stages.count { + if section < stages.count { var index = 0 for sectionIndex in 0...section { index += stages[sectionIndex] } - return self.results?[index - 1].localizedSection + return results?[index - 1].localizedSection } return nil } diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementCommentTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementCommentTableViewController.swift index f707c5e..c0745eb 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementCommentTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementCommentTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the comment type. final class AchievementCommentTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementCommentTableViewController: AchievementBaseTableViewContr } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementCommentTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementGalleryTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementGalleryTableViewController.swift index 48cb32b..30ee502 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementGalleryTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementGalleryTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the gallery type. final class AchievementGalleryTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementGalleryTableViewController: AchievementBaseTableViewContr } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementGalleryTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementGearTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementGearTableViewController.swift index beccae9..8553ae4 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementGearTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementGearTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the gear skin type. final class AchievementGearTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementGearTableViewController: AchievementBaseTableViewControll } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementGearTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementMusicTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementMusicTableViewController.swift index 10df596..a0e55f8 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementMusicTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementMusicTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the music type. final class AchievementMusicTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementMusicTableViewController: AchievementBaseTableViewControl } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementMusicTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementNoteTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementNoteTableViewController.swift index 16ef319..83bce30 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementNoteTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementNoteTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the note skin type. final class AchievementNoteTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementNoteTableViewController: AchievementBaseTableViewControll } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementNoteTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementPlateTableViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementPlateTableViewController.swift index bd42e3e..47d46c1 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementPlateTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementPlateTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The achievement table view controller about the plate type. final class AchievementPlateTableViewController: AchievementBaseTableViewController { override func viewDidLoad() { @@ -19,6 +20,8 @@ final class AchievementPlateTableViewController: AchievementBaseTableViewControl } } +// MARK: - Conforming IndicatorInfoProvider + extension AchievementPlateTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Achievement/AchievementViewController.swift b/RespectU/Sources/ViewControllers/Achievement/AchievementViewController.swift index 48c7a04..c7df113 100644 --- a/RespectU/Sources/ViewControllers/Achievement/AchievementViewController.swift +++ b/RespectU/Sources/ViewControllers/Achievement/AchievementViewController.swift @@ -10,26 +10,30 @@ import UIKit import XLPagerTabStrip +/// The achievement view controller. final class AchievementViewController: BaseViewController { + /// The table view controller about the all types. private lazy var allTableViewController = AchievementAllTableViewController() + /// The table view controller about the music type. private lazy var musicTableViewController = AchievementMusicTableViewController() + /// The table view controller about the gear skin type. private lazy var gearTableViewController = AchievementGearTableViewController() + /// The table view controller about the note skin type. private lazy var noteTableViewController = AchievementNoteTableViewController() + /// The table view controller about the plate type. private lazy var plateTableViewController = AchievementPlateTableViewController() + /// The table view controller about the gallery type. private lazy var galleryTableViewController = AchievementGalleryTableViewController() + /// The table view controller about the comment type. private lazy var commentTableViewController = AchievementCommentTableViewController() - override func viewDidLoad() { - super.viewDidLoad() - } - override func viewControllers( for pagerTabStripController: PagerTabStripViewController ) -> [UIViewController] { @@ -44,6 +48,7 @@ final class AchievementViewController: BaseViewController { ] } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } diff --git a/RespectU/Sources/ViewControllers/BaseViewController.swift b/RespectU/Sources/ViewControllers/BaseViewController.swift index 86f82c8..0b20338 100644 --- a/RespectU/Sources/ViewControllers/BaseViewController.swift +++ b/RespectU/Sources/ViewControllers/BaseViewController.swift @@ -8,6 +8,7 @@ import UIKit +import Then import XLPagerTabStrip /// The base view controller to use button bar pager tap strip. @@ -18,6 +19,7 @@ class BaseViewController: ButtonBarPagerTabStripViewController { super.viewDidLoad() } + /// Sets up button bar pager tab strip. private func setUpButtonBarPagerTabStrip() { settings.style.selectedBarHeight = 1 settings.style.selectedBarBackgroundColor = .black diff --git a/RespectU/Sources/ViewControllers/DownloadViewController.swift b/RespectU/Sources/ViewControllers/DownloadViewController.swift index 41ae5ca..4de9375 100644 --- a/RespectU/Sources/ViewControllers/DownloadViewController.swift +++ b/RespectU/Sources/ViewControllers/DownloadViewController.swift @@ -127,11 +127,13 @@ final class DownloadViewController: UIViewController { .addTarget(self, action: #selector(downloadRecordButtonDidTap(_:)), for: .touchUpInside) } - @objc func downloadDataButtonDidTap(_ sender: UIButton) { + /// Tells the `sender` that the download data button is tapped. + @objc private func downloadDataButtonDidTap(_ sender: UIButton) { apiService.requestVersions(completion: versionCheckHandler) } - @objc func downloadRecordButtonDidTap(_ sender: UIButton) { + /// Tells the `sender` that the download record button is tapped. + @objc private func downloadRecordButtonDidTap(_ sender: UIButton) { let id = KeychainWrapper.standard.string(forKey: "id") ?? "" if id.isEmpty { UIAlertController @@ -155,6 +157,7 @@ final class DownloadViewController: UIViewController { } } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } @@ -164,9 +167,14 @@ final class DownloadViewController: UIViewController { private extension DownloadViewController { + /// Handler for song request. + /// + /// - Parameters: + /// - response: The song response. + /// - error: The passed error. func songRequestHandler(response: SongResponse?, error: Error?) { if let error = error { - plusDataCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -224,12 +232,17 @@ private extension DownloadViewController { } Utils.refreshSkillPoints() isSongRequestFinished = true - plusDataCount() + incrementNumberOfRequests() } + /// Handler for mission request. + /// + /// - Parameters: + /// - response: The mission response. + /// - error: The passed error. func missionRequestHandler(response: MissionResponse?, error: Error?) { if let error = error { - plusDataCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -247,12 +260,17 @@ private extension DownloadViewController { } } isMissionRequestFinished = true - plusDataCount() + incrementNumberOfRequests() } + /// Handler for trophy request. + /// + /// - Parameters: + /// - response: The trophy response. + /// - error: The passed error. func trophyRequestHandler(response: TrophyResponse?, error: Error?) { if let error = error { - plusDataCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -270,12 +288,17 @@ private extension DownloadViewController { } } isTrophyRequestFinished = true - plusDataCount() + incrementNumberOfRequests() } + /// Handler for achievement request. + /// + /// - Parameters: + /// - response: The achievement response. + /// - error: The passed error. func achievementRequestHandler(response: AchievementResponse?, error: Error?) { if let error = error { - plusDataCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -295,12 +318,17 @@ private extension DownloadViewController { } } isAchievementRequestFinished = true - plusDataCount() + incrementNumberOfRequests() } + /// Handler for tip request. + /// + /// - Parameters: + /// - response: The tip response. + /// - error: The passed error. func tipRequestHandler(response: TipResponse?, error: Error?) { if let error = error { - plusDataCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -318,12 +346,17 @@ private extension DownloadViewController { } } isTipRequestFinished = true - plusDataCount() + incrementNumberOfRequests() } + /// Handler for version request. + /// + /// - Parameters: + /// - response: The version response. + /// - error: The passed error. func versionRequestHandler(response: VersionResponse?, error: Error?) { if let error = error { - plusDataCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -334,12 +367,17 @@ private extension DownloadViewController { VersionInfo.add(response) } isVersionRequestFinished = true - plusDataCount() + incrementNumberOfRequests() } + /// Handler for record request. + /// + /// - Parameters: + /// - response: The record response. + /// - error: The passed error. func recordRequestHandler(response: RecordResponse?, error: Error?) { if let error = error { - plusRecordCount() + incrementNumberOfRecordRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -354,9 +392,14 @@ private extension DownloadViewController { RecordInfo.update(record, to: result) } isRecordRequestFinished = true - plusRecordCount() + incrementNumberOfRecordRequests() } + /// Handler for version check request. + /// + /// - Parameters: + /// - response: The version response. + /// - error: The passed error. func versionCheckHandler(response: VersionResponse?, error: Error?) { if let error = error { present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) @@ -390,6 +433,7 @@ private extension DownloadViewController { private extension DownloadViewController { + /// Presents the alert representing the task is completed successfully. func presentSuccessAlert() { UIAlertController .alert(title: "", message: L10n.yourDataHasBeenSuccessfullyUploaded) @@ -399,6 +443,7 @@ private extension DownloadViewController { .present(to: self) } + /// Presents the alert representing the task is completed with error. func presentFailureAlert() { UIAlertController .alert(title: "", message: L10n.networkError) @@ -408,13 +453,15 @@ private extension DownloadViewController { .present(to: self) } - func plusDataCount() { + /// Increments the number of requests. + func incrementNumberOfRequests() { DispatchQueue.main.sync { [weak self] in self?.numberOfRequests += 1 } } - func plusRecordCount() { + /// Increments the number of record request. + func incrementNumberOfRecordRequests() { DispatchQueue.main.sync { [weak self] in self?.numberOfRecordRequests += 1 } diff --git a/RespectU/Sources/ViewControllers/GuideViewController.swift b/RespectU/Sources/ViewControllers/GuideViewController.swift index 4338208..f6e8235 100644 --- a/RespectU/Sources/ViewControllers/GuideViewController.swift +++ b/RespectU/Sources/ViewControllers/GuideViewController.swift @@ -287,6 +287,7 @@ extension GuideViewController: GuideThirdCellDelegate { extension GuideViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch indexPath.section { case 0: let cell diff --git a/RespectU/Sources/ViewControllers/InitViewController.swift b/RespectU/Sources/ViewControllers/InitViewController.swift index d89d9b1..66b47be 100644 --- a/RespectU/Sources/ViewControllers/InitViewController.swift +++ b/RespectU/Sources/ViewControllers/InitViewController.swift @@ -93,13 +93,18 @@ final class InitViewController: UIViewController { } } -// MARK: - Private Method +// MARK: - Request Handler private extension InitViewController { + /// Handler for song request. + /// + /// - Parameters: + /// - response: The song response. + /// - error: The passed error. func songRequestHandler(response: SongResponse?, error: Error?) { if let error = error { - plusCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -108,12 +113,17 @@ private extension InitViewController { SongInfo.add(song) } isSongRequestFinished = true - plusCount() + incrementNumberOfRequests() } + /// Handler for mission request. + /// + /// - Parameters: + /// - response: The mission response. + /// - error: The passed error. func missionRequestHandler(response: MissionResponse?, error: Error?) { if let error = error { - plusCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -122,12 +132,17 @@ private extension InitViewController { MissionInfo.add(mission) } isMissionRequestFinished = true - plusCount() + incrementNumberOfRequests() } + /// Handler for trophy request. + /// + /// - Parameters: + /// - response: The trophy response. + /// - error: The passed error. func trophyRequestHandler(response: TrophyResponse?, error: Error?) { if let error = error { - plusCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -136,12 +151,17 @@ private extension InitViewController { TrophyInfo.add(trophy) } isTrophyRequestFinished = true - plusCount() + incrementNumberOfRequests() } + /// Handler for achievement request. + /// + /// - Parameters: + /// - response: The achievement response. + /// - error: The passed error. func achievementRequestHandler(response: AchievementResponse?, error: Error?) { if let error = error { - plusCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -150,12 +170,17 @@ private extension InitViewController { AchievementInfo.add(achievement) } isAchievementRequestFinished = true - plusCount() + incrementNumberOfRequests() } + /// Handler for tip request. + /// + /// - Parameters: + /// - response: The tip response. + /// - error: The passed error. func tipRequestHandler(response: TipResponse?, error: Error?) { if let error = error { - plusCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } @@ -164,25 +189,31 @@ private extension InitViewController { TipInfo.add(tip) } isTipRequestFinished = true - plusCount() + incrementNumberOfRequests() } + /// Handler for version request. + /// + /// - Parameters: + /// - response: The version response. + /// - error: The passed error. func versionRequestHandler(response: VersionResponse?, error: Error?) { if let error = error { - plusCount() + incrementNumberOfRequests() present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) return } guard let response = response else { return } VersionInfo.add(response) isVersionRequestFinished = true - plusCount() + incrementNumberOfRequests() } } -extension InitViewController { +private extension InitViewController { - private func presentSuccessAlert() { + /// Presents the alert representing the task is completed successfully. + func presentSuccessAlert() { let results = SongInfo.fetch() let oldResults = OldRecordInfo.get() UIAlertController @@ -323,7 +354,8 @@ extension InitViewController { .present(to: self) } - private func plusCount() { + /// Increments number of requests. + func incrementNumberOfRequests() { DispatchQueue.main.sync { [weak self] in self?.numberOfRequests += 1 } diff --git a/RespectU/Sources/ViewControllers/Mission/MissionBSTableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionBSTableViewController.swift index 40a7960..c148691 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionBSTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionBSTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the BLACK SQUARE series. final class MissionBSTableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionBSTableViewController: MissionBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionBSTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionBaseTableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionBaseTableViewController.swift index dce329b..e8a187d 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionBaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionBaseTableViewController.swift @@ -10,10 +10,13 @@ import UIKit import RealmSwift +/// The mission base table view controller. class MissionBaseTableViewController: UITableViewController { + /// The fetched mission results. var results: Results? + /// The cell identifier. let cellIdentifier = "missionCell" override func viewDidLoad() { @@ -21,16 +24,20 @@ class MissionBaseTableViewController: UITableViewController { configure() } + /// Configures initial settings. private func configure() { - tableView = UITableView(frame: tableView.bounds, style: .grouped) - tableView.rowHeight = 60 - tableView.showsVerticalScrollIndicator = false - tableView.separatorStyle = .none - tableView.register(UINib(nibName: MissionCell.name, bundle: nil), - forCellReuseIdentifier: cellIdentifier) + tableView = UITableView(frame: tableView.bounds, style: .grouped).then { + $0.rowHeight = 60 + $0.showsVerticalScrollIndicator = false + $0.separatorStyle = .none + $0.register(UINib(nibName: MissionCell.name, bundle: nil), + forCellReuseIdentifier: cellIdentifier) + } } } +// MARK: - UITableView Configuration + extension MissionBaseTableViewController { override func tableView(_ tableView: UITableView, @@ -79,11 +86,11 @@ extension MissionBaseTableViewController { override func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) { guard let cell = tableView.cellForRow(at: indexPath) as? MissionCell else { return } guard let object = results?[indexPath.row + indexPath.section * 6] else { return } - cell.setColorsInMission(object.section, labels: cell.labels) + cell.colorizeSubviews(inSeries: object.seriesEnum ?? .respect, section: object.section) } override func tableView(_ tableView: UITableView, didUnhighlightRowAt indexPath: IndexPath) { guard let cell = tableView.cellForRow(at: indexPath) as? MissionCell else { return } - cell.unsetColors(labels: cell.labels) + cell.decolorizeSubviews() } } diff --git a/RespectU/Sources/ViewControllers/Mission/MissionCETableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionCETableViewController.swift index 6501601..69d1476 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionCETableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionCETableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the CLAZZIQUAI EDITION series. final class MissionCETableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionCETableViewController: MissionBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionCETableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionDetailViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionDetailViewController.swift index 8a71506..c32d8fc 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionDetailViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionDetailViewController.swift @@ -152,10 +152,13 @@ final class MissionDetailViewController: UIViewController { /// The reward label. @IBOutlet private weak var rewardLabel: UILabel! - // MARK: Life Cycle - override func viewDidLoad() { super.viewDidLoad() + configure() + } + + /// Configures initial settings. + private func configure() { setVisibilityOfSubviews() titleLabel.text = missionInfo.title scoreLabel.text = missionInfo.score == 0 ? "-" : "\(missionInfo.score)" @@ -197,10 +200,12 @@ final class MissionDetailViewController: UIViewController { } } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } + /// Tells the `sender` that the more button is tapped. @IBAction private func moreButtonDidTap(_ sender: UIButton) { switch sender.tag { case 0: diff --git a/RespectU/Sources/ViewControllers/Mission/MissionLinkDiskTableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionLinkDiskTableViewController.swift index 7e0934e..4a215f5 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionLinkDiskTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionLinkDiskTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the LINK DISK series. final class MissionLinkDiskTableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionLinkDiskTableViewController: MissionBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionLinkDiskTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionRespectTableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionRespectTableViewController.swift index 4f5c0cf..5785baa 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionRespectTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionRespectTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the RESPECT series. final class MissionRespectTableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionRespectTableViewController: MissionBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionRespectTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionTechnika1TableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionTechnika1TableViewController.swift index 7196966..1688bb5 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionTechnika1TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionTechnika1TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the TECHNIKA 1 series. final class MissionTechnika1TableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionTechnika1TableViewController: MissionBaseTableViewController } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionTechnika1TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionTechnika2TableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionTechnika2TableViewController.swift index 185f9ad..46abbb9 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionTechnika2TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionTechnika2TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the TECHNIKA 2 series. final class MissionTechnika2TableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionTechnika2TableViewController: MissionBaseTableViewController } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionTechnika2TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionTechnika3TableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionTechnika3TableViewController.swift index 87eef63..6eb7195 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionTechnika3TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionTechnika3TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the TECHNIKA 3 series. final class MissionTechnika3TableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionTechnika3TableViewController: MissionBaseTableViewController } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionTechnika3TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionTrilogyTableViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionTrilogyTableViewController.swift index 838ea7b..824c9fc 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionTrilogyTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionTrilogyTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The mission table view controller about the TRILOGY series. final class MissionTrilogyTableViewController: MissionBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class MissionTrilogyTableViewController: MissionBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension MissionTrilogyTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Mission/MissionViewController.swift b/RespectU/Sources/ViewControllers/Mission/MissionViewController.swift index 04e31d0..51450f6 100644 --- a/RespectU/Sources/ViewControllers/Mission/MissionViewController.swift +++ b/RespectU/Sources/ViewControllers/Mission/MissionViewController.swift @@ -10,22 +10,31 @@ import UIKit import XLPagerTabStrip +/// The mission view controller. class MissionViewController: BaseViewController { + /// The table view representing the RESPECT series. private lazy var respectTableViewController = MissionRespectTableViewController() + /// The table view representing the TRILOGY series. private lazy var trilogyTableViewController = MissionTrilogyTableViewController() + /// The table view representing the CLAZZIQUAI EDITION series. private lazy var ceTableViewController = MissionCETableViewController() + /// The table view representing the TECHNIKA 1 series. private lazy var technika1TableViewController = MissionTechnika1TableViewController() + /// The table view representing the BLACK SQUARE series. private lazy var bsTableViewController = MissionBSTableViewController() + /// The table view representing the TECHNIKA 2 series. private lazy var technika2TableViewController = MissionTechnika2TableViewController() + /// The table view representing the LINK DISK series. private lazy var linkDiskTableViewController = MissionLinkDiskTableViewController() + /// The table view representing the TECHNIKA 3 series. private lazy var technika3TableViewController = MissionTechnika3TableViewController() override func viewControllers( @@ -43,6 +52,7 @@ class MissionViewController: BaseViewController { ] } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } diff --git a/RespectU/Sources/ViewControllers/PerformanceViewController.swift b/RespectU/Sources/ViewControllers/PerformanceViewController.swift index b86c35a..1ada63e 100644 --- a/RespectU/Sources/ViewControllers/PerformanceViewController.swift +++ b/RespectU/Sources/ViewControllers/PerformanceViewController.swift @@ -55,6 +55,7 @@ final class PerformanceViewController: UIViewController { presentRateView() } + /// Configures initial settings. private func setup() { recordButton.layer.cornerRadius = recordButton.bounds.height / 2 recordButton.layer.borderWidth = 1 @@ -67,12 +68,14 @@ final class PerformanceViewController: UIViewController { apiService.requestVersions(completion: versionRequestHandler) } + /// Resets subviews. private func resetSubviews() { recordButton.setTitle(L10n.performanceRecord, for: .normal) nicknameButton.setTitle(Persistence.nickname, for: []) tableView.reloadData() } + /// Tells the `sender` that the nickname button is tapped. @IBAction private func nicknameButtonDidTap(_ sender: UIButton) { let id = KeychainWrapper.standard.string(forKey: "id") ?? "" if id.isEmpty { @@ -103,11 +106,13 @@ final class PerformanceViewController: UIViewController { .present(to: self) } + /// Tells the `sender` that the next button is tapped. @IBAction private func nextButtonDidTap(_ sender: UIButton) { let controller = StoryboardScene.Guide.guideViewController.instantiate() navigationController?.pushViewController(controller, animated: true) } + /// Tells the `sender` that the record button is tapped. @IBAction private func recordButtonDidTap(_ sender: UIButton) { let controller = StoryboardScene.Record.recordViewController.instantiate() present(controller, animated: true) @@ -118,6 +123,11 @@ final class PerformanceViewController: UIViewController { private extension PerformanceViewController { + /// Handler for version request. + /// + /// - Parameters: + /// - response: The version response. + /// - error: The passed error. func versionRequestHandler(response: VersionResponse?, error: Error?) { if let error = error { present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) @@ -139,8 +149,9 @@ private extension PerformanceViewController { } } else if response.serverVersion != versionInfo.serverVersion { DispatchQueue.main.async { + let message = L10n.ThereIsNewData.goToDownloadingFromTheServerAndUpdateToTheLatestData UIAlertController - .alert(title: "", message: "There is new data.\nGo to \"Downloading from the server\" and update to the latest data.".localized) + .alert(title: "", message: message) .action(title: L10n.ok) { [weak self] _ in guard let self = self else { return } NotificationCenter.default.removeObserver(self) @@ -153,6 +164,11 @@ private extension PerformanceViewController { } } + /// Handler for upload nickname request. + /// + /// - Parameters: + /// - statusCode: The status code. + /// - error: The passed error. func nicknameUploadRequestHandler(statusCode: Int?, error: Error?) { if let error = error { present(UIAlertController.makeErrorAlert(error), animated: true, completion: nil) @@ -162,14 +178,14 @@ private extension PerformanceViewController { if (200...299).contains(statusCode) { DispatchQueue.main.async { UIAlertController - .alert(title: "", message: "Succeeded to change nickname".localized) + .alert(title: "", message: L10n.successfullyChangingYourNickname) .action(title: L10n.ok) .present(to: self) } } else { DispatchQueue.main.async { UIAlertController - .alert(title: "", message: "Failed to change nickname".localized) + .alert(title: "", message: L10n.failedToChangingYourNickname) .action(title: L10n.ok) .present(to: self) } @@ -205,9 +221,11 @@ extension PerformanceViewController: UITableViewDataSource { summaryCell.collectionView .register(UINib(nibName: SummaryCollectionCell.name, bundle: nil), forCellWithReuseIdentifier: CellIdentifier.summaryCollection) - } default: - return UITableViewCell() + } + default: + return UITableViewCell() } + return UITableViewCell() } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { @@ -249,7 +267,7 @@ extension PerformanceViewController: UICollectionViewDataSource { let cell = collectionView .dequeueReusableCell(withReuseIdentifier: CellIdentifier.summaryCollection, for: indexPath) if case let summaryCollectionCell as SummaryCollectionCell = cell { - summaryCollectionCell.setProperties(RecordInfo.fetch(), at: indexPath.item) + summaryCollectionCell.configure(with: RecordInfo.fetch(), at: indexPath.item) } return cell } diff --git a/RespectU/Sources/ViewControllers/Ranking/Ranking4BTableViewController.swift b/RespectU/Sources/ViewControllers/Ranking/Ranking4BTableViewController.swift index 09bbda8..1c23f26 100644 --- a/RespectU/Sources/ViewControllers/Ranking/Ranking4BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Ranking/Ranking4BTableViewController.swift @@ -11,6 +11,7 @@ import UIKit import SVProgressHUD import XLPagerTabStrip +/// The ranking table view controller about the 4B. final class Ranking4BTableViewController: RankingBaseTableViewController { override func viewDidLoad() { @@ -32,6 +33,8 @@ final class Ranking4BTableViewController: RankingBaseTableViewController { } } +// MARK: - UITableView Configuration + extension Ranking4BTableViewController { override func tableView(_ tableView: UITableView, @@ -44,6 +47,8 @@ extension Ranking4BTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Ranking4BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Ranking/Ranking5BTableViewController.swift b/RespectU/Sources/ViewControllers/Ranking/Ranking5BTableViewController.swift index b13af28..4e90f50 100644 --- a/RespectU/Sources/ViewControllers/Ranking/Ranking5BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Ranking/Ranking5BTableViewController.swift @@ -11,6 +11,7 @@ import UIKit import SVProgressHUD import XLPagerTabStrip +/// The ranking table view controller about the 5B. final class Ranking5BTableViewController: RankingBaseTableViewController { override func viewDidLoad() { @@ -32,6 +33,8 @@ final class Ranking5BTableViewController: RankingBaseTableViewController { } } +// MARK: - UITableView Configuration + extension Ranking5BTableViewController { override func tableView(_ tableView: UITableView, @@ -44,6 +47,8 @@ extension Ranking5BTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Ranking5BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Ranking/Ranking6BTableViewController.swift b/RespectU/Sources/ViewControllers/Ranking/Ranking6BTableViewController.swift index f28d1f8..f6c5b34 100644 --- a/RespectU/Sources/ViewControllers/Ranking/Ranking6BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Ranking/Ranking6BTableViewController.swift @@ -11,6 +11,7 @@ import UIKit import SVProgressHUD import XLPagerTabStrip +/// The ranking table view controller about the 6B. final class Ranking6BTableViewController: RankingBaseTableViewController { override func viewDidLoad() { @@ -32,6 +33,8 @@ final class Ranking6BTableViewController: RankingBaseTableViewController { } } +// MARK: - UITableView Configuration + extension Ranking6BTableViewController { override func tableView(_ tableView: UITableView, @@ -44,6 +47,8 @@ extension Ranking6BTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Ranking6BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Ranking/Ranking8BTableViewController.swift b/RespectU/Sources/ViewControllers/Ranking/Ranking8BTableViewController.swift index 779acc9..fccdb90 100644 --- a/RespectU/Sources/ViewControllers/Ranking/Ranking8BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Ranking/Ranking8BTableViewController.swift @@ -11,6 +11,7 @@ import UIKit import SVProgressHUD import XLPagerTabStrip +/// The ranking table view controller about the 8B. final class Ranking8BTableViewController: RankingBaseTableViewController { override func viewDidLoad() { @@ -32,6 +33,8 @@ final class Ranking8BTableViewController: RankingBaseTableViewController { } } +// MARK: - UITableView Configuration + extension Ranking8BTableViewController { override func tableView(_ tableView: UITableView, @@ -44,6 +47,8 @@ extension Ranking8BTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Ranking8BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Ranking/RankingBaseTableViewController.swift b/RespectU/Sources/ViewControllers/Ranking/RankingBaseTableViewController.swift index 99fca5e..a6ae799 100644 --- a/RespectU/Sources/ViewControllers/Ranking/RankingBaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Ranking/RankingBaseTableViewController.swift @@ -10,14 +10,16 @@ import UIKit import RealmSwift +/// The ranking base table view controller. class RankingBaseTableViewController: UITableViewController { + /// The api service. let apiService: APIServiceType = APIService() - let nickname = UserDefaults.standard.string(forKey: "nickname") ?? "" - + /// The cell identifier. let cellIdentifier = "rankingCell" + /// The requestsed ranking results. var results: [RankingResponse.Ranking] = [] override func viewDidLoad() { @@ -25,15 +27,20 @@ class RankingBaseTableViewController: UITableViewController { configure() } + /// Configures initial settings. private func configure() { - tableView.showsVerticalScrollIndicator = false - tableView.separatorStyle = .none - tableView.rowHeight = 40 - tableView.register(UINib(nibName: RankingCell.name, bundle: nil), - forCellReuseIdentifier: cellIdentifier) + tableView.do { + $0.showsVerticalScrollIndicator = false + $0.separatorStyle = .none + $0.rowHeight = 40 + $0.register(UINib(nibName: RankingCell.name, bundle: nil), + forCellReuseIdentifier: cellIdentifier) + } } } +// MARK: - UITableView Confiruation + extension RankingBaseTableViewController { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { diff --git a/RespectU/Sources/ViewControllers/Ranking/RankingViewController.swift b/RespectU/Sources/ViewControllers/Ranking/RankingViewController.swift index 1a7ecdc..fc2b696 100644 --- a/RespectU/Sources/ViewControllers/Ranking/RankingViewController.swift +++ b/RespectU/Sources/ViewControllers/Ranking/RankingViewController.swift @@ -10,14 +10,19 @@ import UIKit import XLPagerTabStrip +/// The ranking view controller. final class RankingViewController: BaseViewController { + /// The table view controller representing the 4B. private lazy var ranking4bTableViewController = Ranking4BTableViewController() + /// The table view controller representing the 5B. private lazy var ranking5bTableViewController = Ranking5BTableViewController() + /// The table view controller representing the 6B. private lazy var ranking6bTableViewController = Ranking6BTableViewController() + /// The table view controller representing the 8B. private lazy var ranking8bTableViewController = Ranking8BTableViewController() override func viewControllers( @@ -31,6 +36,7 @@ final class RankingViewController: BaseViewController { ] } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } diff --git a/RespectU/Sources/ViewControllers/Record/RecordAllTableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordAllTableViewController.swift index 182f50f..ef6580e 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordAllTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordAllTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the all series. final class RecordAllTableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class RecordAllTableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordAllTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordBSTableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordBSTableViewController.swift index 13be251..96a00c5 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordBSTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordBSTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the BLACK SQUARE series. final class RecordBSTableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordBSTableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordBSTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordBaseTableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordBaseTableViewController.swift index 36ca507..d14d71d 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordBaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordBaseTableViewController.swift @@ -13,19 +13,25 @@ import RealmSwift /// The record base table view controller. class RecordBaseTableViewController: UITableViewController { + /// The record view controller which the parent of this view controller. private var recordViewController: RecordViewController { guard let parent = parent as? RecordViewController else { return RecordViewController() } return parent } + /// The fetched temperature song results. var tempSongResults: Results? + /// The processed song results. var songResults: [SongInfo]? + /// The fetched record results. private var recordResults: Results? + /// The record view. private var recordView: RecordView! + /// The cell identifier. private let cellIdentifier = "recordCell" override func viewDidLoad() { @@ -43,6 +49,7 @@ class RecordBaseTableViewController: UITableViewController { dismissRecordViewIfExists() } + /// Configures initial settings. private func configure() { tempSongResults = SongInfo.fetch() recordResults = RecordInfo.fetch() @@ -53,6 +60,8 @@ class RecordBaseTableViewController: UITableViewController { } } +// MARK: - UITableView Configuration + extension RecordBaseTableViewController { override func tableView(_ tableView: UITableView, @@ -63,9 +72,9 @@ extension RecordBaseTableViewController { recordCell.configure(with: object) if let selectedIndexPath = tableView.indexPathForSelectedRow { if selectedIndexPath == indexPath { - recordCell.setColorsInSong(object.series, labels: recordCell.labels) + recordCell.colorizeSubviews(in: object.seriesEnum ?? .respect) } else { - recordCell.unsetColors(labels: recordCell.labels) + recordCell.decolorizeSubviews() } } return cell @@ -84,7 +93,7 @@ extension RecordBaseTableViewController { #keyPath(RecordInfo.title.english), songResult.title?.english ?? "") guard let object = recordResults?.filter(predicate).first else { return } - cell.setColorsInSong(object.series, labels: cell.labels) + cell.colorizeSubviews(in: object.seriesEnum ?? .respect) recordView = UIView.instantiateFromXIB(xibName: RecordView.name) as? RecordView recordView.delegate = self recordView.translatesAutoresizingMaskIntoConstraints = false @@ -116,19 +125,19 @@ extension RecordBaseTableViewController { override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { guard let cell = tableView.cellForRow(at: indexPath) as? RecordCell else { return } - cell.unsetColors(labels: cell.labels) + cell.decolorizeSubviews() } override func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) { guard let cell = tableView.cellForRow(at: indexPath) as? RecordCell else { return } guard let object = songResults?[indexPath.row] else { return } - cell.setColorsInSong(object.series, labels: cell.labels) + cell.colorizeSubviews(in: object.seriesEnum ?? .respect) } override func tableView(_ tableView: UITableView, didUnhighlightRowAt indexPath: IndexPath) { guard let cell = tableView.cellForRow(at: indexPath) as? RecordCell else { return } - cell.unsetColors(labels: cell.labels) + cell.decolorizeSubviews() } } @@ -137,14 +146,15 @@ extension RecordBaseTableViewController { extension RecordBaseTableViewController: RecordViewDelegate { func recordView(_ view: RecordView, didTapTypeButton button: UIButton) { - let button = (sender.title(for: .normal) ?? Button.button4).lowercased() - guard let selectedIndexPath = self.tableView.indexPathForSelectedRow else { return } + let buttonTitle = button.title(for: .normal)?.lowercased() ?? "" + let button = Button(rawValue: buttonTitle) ?? .button4 + guard let selectedIndexPath = tableView.indexPathForSelectedRow else { return } guard let songResult = songResults?[selectedIndexPath.row] else { return } let predicate = NSPredicate(format: "%K == %@", #keyPath(RecordInfo.title.english), songResult.title?.english ?? "") guard let object = recordResults?.filter(predicate).first else { return } - recordView.changeButtonProperties(object, button: button) + recordView.changeButtonProperties(with: object, inButton: button) } func recordView(_ view: RecordView, didTapCancelButton button: UIButton) { @@ -157,6 +167,34 @@ extension RecordBaseTableViewController: RecordViewDelegate { didTapRankRecordButton button: UIButton, inDifficulty difficulty: Difficulty, inCurrentButton currentButton: Button) { + presentRankSettingAlert(inDifficulty: difficulty, inButton: currentButton) + } + + func recordView(_ view: RecordView, + didTapRatingRecordButton button: UIButton, + inDifficulty difficulty: Difficulty, + inCurrentButton currentButton: Button) { + presentRatingSettingAlert(inDifficulty: difficulty, inButton: currentButton) + } + + func recordView(_ view: RecordView, + didTapNoteRecordButton button: UIButton, + inDifficulty difficulty: Difficulty, + inCurrentButton currentButton: Button) { + presentNoteSettingAlert(inDifficulty: difficulty, inButton: currentButton) + } +} + +// MARK: - Private Method + +private extension RecordBaseTableViewController { + + /// Presents the alert controller to set the rank in `difficulty` and `button`. + /// + /// - Parameters: + /// - difficulty: The specific difficulty. + /// - button: The specific button. + func presentRankSettingAlert(inDifficulty difficulty: Difficulty, inButton button: Button) { guard let selectedIndexPath = tableView.indexPathForSelectedRow else { return } guard let songResult = songResults?[selectedIndexPath.row] else { return } let predicate = NSPredicate(format: "%K == %@", @@ -166,42 +204,42 @@ extension RecordBaseTableViewController: RecordViewDelegate { UIAlertController .alert(title: L10n.rank, message: L10n.selectTheRank) .action(title: "-") { [weak self] _ in - self?.setRank(object, rank: Rank.none, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setRank(.none, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: Rank.s.rawValue.uppercased()) { [weak self] _ in - self?.setRank(object, rank: Rank.s, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setRank(.s, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: Rank.a.rawValue.uppercased()) { [weak self] _ in - self?.setRank(object, rank: Rank.a, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setRank(.a, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: Rank.b.rawValue.uppercased()) { [weak self] _ in - self?.setRank(object, rank: Rank.b, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setRank(.b, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: Rank.c.rawValue.uppercased()) { [weak self] _ in - self?.setRank(object, rank: Rank.c, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setRank(.c, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: L10n.cancel, style: .cancel) .present(to: self) } - func recordView(_ view: RecordView, - didTapRatingRecordButton button: UIButton, - inDifficulty difficulty: Difficulty, - inCurrentButton currentButton: Button) { + /// Presents the alert controller to set the rating in `difficulty` and `button`. + /// + /// - Parameters: + /// - difficulty: The specific difficulty. + /// - button: The specific button. + func presentRatingSettingAlert(inDifficulty difficulty: Difficulty, inButton button: Button) { guard let selectedIndexPath = tableView.indexPathForSelectedRow else { return } guard let songResult = songResults?[selectedIndexPath.row] else { return } let predicate = NSPredicate(format: "%K == %@", #keyPath(RecordInfo.title.english), songResult.title?.english ?? "") guard let object = recordResults?.filter(predicate).first else { return } - let message = """ - Enter the rate.\nTo reset the value, do not enter any values. - """ + let message = L10n.EnterTheRate.toResetTheValueDoNotEnterAnyValues let alert = UIAlertController .alert(title: L10n.rating, message: message.localized) alert.textField { @@ -211,39 +249,44 @@ extension RecordBaseTableViewController: RecordViewDelegate { .action(title: L10n.ok) { [weak self] _ in let input = alert.textFields?.first?.text ?? "" if input.isEmpty { - self?.setRating(0, with: object, inDifficulty: difficulty, inButton: currentButton) + self?.setRating(0, with: object, inDifficulty: difficulty, inButton: button) } else { guard let value = Double(input) else { return } - let rate = value >= 100 ? 100 : value - self?.setRating(rate, with: object, inDifficulty: difficulty, inButton: currentButton) - switch rate { + let rating = value >= 100 ? 100 : value + self?.setRating(rating, with: object, inDifficulty: difficulty, inButton: button) + switch rating { case 98...100: - self?.setRank(.s, with: object, inDifficulty: difficulty, inButton: currentButton) + self?.setRank(.s, with: object, inDifficulty: difficulty, inButton: button) case 95..<98: - self?.setRank(.a, with: object, inDifficulty: difficulty, inButton: currentButton) + self?.setRank(.a, with: object, inDifficulty: difficulty, inButton: button) case 90..<95: - self?.setRank(.b, with: object, inDifficulty: difficulty, inButton: currentButton) + self?.setRank(.b, with: object, inDifficulty: difficulty, inButton: button) case ..<90: - self?.setRank(.c, with: object, inDifficulty: difficulty, inButton: currentButton) + self?.setRank(.c, with: object, inDifficulty: difficulty, inButton: button) default: break } } - self?.recordView.reloadButtonsAndLabels(with: object, inButton: currentButton) - guard let buttonExpansion = button.buttonExpansion else { return } - guard let note = object.value(forKeyPath: "\(buttonExpansion).\(difficulty).note") as? String else { return } - if note != Note.maxCombo { - self?.presentNoteAlert(difficulty: difficulty, button: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) + guard let buttonExpansion = button.expansion else { return } + guard let note + = object.value(forKeyPath: "\(buttonExpansion).\(difficulty).note") as? String + else { return } + let noteEnum = Note(rawValue: note) ?? .none + if noteEnum != .maxCombo { + self?.presentNoteSettingAlert(inDifficulty: difficulty, inButton: button) } } .action(title: L10n.cancel, style: .cancel) .present(to: self) } - func recordView(_ view: RecordView, - didTapNoteRecordButton button: UIButton, - inDifficulty difficulty: Difficulty, - inCurrentButton currentButton: Button) { + /// Presents the alert controller to set the note in `difficulty` and `button`. + /// + /// - Parameters: + /// - difficulty: The specific difficulty. + /// - button: The specific button. + func presentNoteSettingAlert(inDifficulty difficulty: Difficulty, inButton button: Button) { guard let selectedIndexPath = self.tableView.indexPathForSelectedRow else { return } guard let songResult = self.songResults?[selectedIndexPath.row] else { return } let predicate = NSPredicate(format: "%K == %@", @@ -253,28 +296,30 @@ extension RecordBaseTableViewController: RecordViewDelegate { UIAlertController .alert(title: L10n.note, message: L10n.selectTheNote) .action(title: "-") { [weak self] _ in - self?.setNote(object, note: Note.none, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setNote(.none, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: Note.maxCombo.expansion) { [weak self] _ in - self?.setNote(object, note: Note.maxCombo, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setNote(.maxCombo, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: Note.perfectPlay.expansion) { [weak self] _ in - self?.setRank(object, rank: Rank.s, difficulty: difficulty, button: button) - self?.setRate(object, rate: 100, difficulty: difficulty, button: button) - self?.setNote(object, note: Note.perfectPlay, difficulty: difficulty, button: button) - self?.recordView.reloadButtonsAndLabels(object, button: button) + self?.setRank(.s, with: object, inDifficulty: difficulty, inButton: button) + self?.setRating(100, with: object, inDifficulty: difficulty, inButton: button) + self?.setNote(.perfectPlay, with: object, inDifficulty: difficulty, inButton: button) + self?.recordView.reloadButtonsAndLabels(with: object, inButton: button) } .action(title: L10n.cancel, style: .cancel) .present(to: self) } -} - -// MARK: - Private Method - -private extension RecordBaseTableViewController { + /// Sets `rank` with `recordInfo` in `difficulty` and `button`. + /// + /// - Parameters: + /// - rank: The rank will be saved. + /// - recordInfo: The record information will be updated. + /// - difficulty: The specific difficulty. + /// - button: The specific button. func setRank(_ rank: Rank, with recordInfo: RecordInfo, inDifficulty difficulty: Difficulty, @@ -283,6 +328,13 @@ private extension RecordBaseTableViewController { RecordInfo.update(recordInfo, with: [keyPath: rank.rawValue.uppercased()]) } + /// Sets `rating` with `recordInfo` in `difficulty` and `button`. + /// + /// - Parameters: + /// - rating: The rating will be saved. + /// - recordInfo: The record information will be updated. + /// - difficulty: The specific difficulty. + /// - button: The specific button. func setRating(_ rating: Double, with recordInfo: RecordInfo, inDifficulty difficulty: Difficulty, @@ -293,6 +345,13 @@ private extension RecordBaseTableViewController { recordView.updateRankingAndSkillPointLabel(with: recordInfo, inButton: button) } + /// Sets `note` with `recordInfo` in `difficulty` and `button`. + /// + /// - Parameters: + /// - note: The note will be saved. + /// - recordInfo: The record information will be updated. + /// - difficulty: The specific difficulty. + /// - button: The specific button. func setNote(_ note: Note, with recordInfo: RecordInfo, inDifficulty difficulty: Difficulty, @@ -303,6 +362,11 @@ private extension RecordBaseTableViewController { recordView.updateRankingAndSkillPointLabel(with: recordInfo, inButton: button) } + /// Updates skill point with `recordInfo` in `button`. + /// + /// - Parameters: + /// - recordInfo: The record information will be updated. + /// - button: The specific button. func updateSkillPoint(with recordInfo: RecordInfo, inButton button: Button) { guard let recordButtonKeyPath = recordInfo.value(forKeyPath: button.expansion ?? "") as? RecordButtonInfo @@ -354,6 +418,7 @@ private extension RecordBaseTableViewController { } } + /// Dismisses record view if it is presenting. func dismissRecordViewIfExists() { if let lastSubview = recordViewController.view.subviews.last as? RecordView { lastSubview.removeFromSuperview() @@ -361,11 +426,12 @@ private extension RecordBaseTableViewController { } } + /// Deselects table view if it is selected. func deselectTableViewIfSelected() { if let selectedIndexPath = self.tableView.indexPathForSelectedRow { guard let cell = tableView.cellForRow(at: selectedIndexPath) as? RecordCell else { return } tableView.deselectRow(at: selectedIndexPath, animated: true) - cell.unsetColors(labels: cell.labels) + cell.decolorizeSubviews() } } } diff --git a/RespectU/Sources/ViewControllers/Record/RecordCETableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordCETableViewController.swift index fc56511..886486a 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordCETableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordCETableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the CLAZZIQUAI EDITION series. final class RecordCETableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordCETableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordCETableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordPortable1TableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordPortable1TableViewController.swift index f927858..da77575 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordPortable1TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordPortable1TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the PORTABLE 1 series. final class RecordPortable1TableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordPortable1TableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordPortable1TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordPortable2TableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordPortable2TableViewController.swift index 1b6aa23..c210df6 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordPortable2TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordPortable2TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the PORTABLE 2 series. final class RecordPortable2TableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordPortable2TableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordPortable2TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordRespectTableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordRespectTableViewController.swift index 21caa0b..8182bb2 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordRespectTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordRespectTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the RESPECT series. final class RecordRespectTableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordRespectTableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordRespectTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordTechnika1TableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordTechnika1TableViewController.swift index 926a21d..aad6f7a 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordTechnika1TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordTechnika1TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the TECHNIKA 1 series. final class RecordTechnika1TableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordTechnika1TableViewController: RecordBaseTableViewController { } } +// MARK: - IndicatorInfoProvider + extension RecordTechnika1TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordTechnika2TableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordTechnika2TableViewController.swift index fe7dcec..f416940 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordTechnika2TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordTechnika2TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the TECHNIKA 2 series. final class RecordTechnika2TableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordTechnika2TableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordTechnika2TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordTechnika3TableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordTechnika3TableViewController.swift index 1cf27d4..d2aeac0 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordTechnika3TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordTechnika3TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the TECHNIKA 3 series. final class RecordTechnika3TableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordTechnika3TableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordTechnika3TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordTrilogyTableViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordTrilogyTableViewController.swift index 57ddef2..1987da5 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordTrilogyTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordTrilogyTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The record table view controller about the TRILOGY series. final class RecordTrilogyTableViewController: RecordBaseTableViewController { override func viewDidLoad() { @@ -20,6 +21,8 @@ final class RecordTrilogyTableViewController: RecordBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension RecordTrilogyTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Record/RecordViewController.swift b/RespectU/Sources/ViewControllers/Record/RecordViewController.swift index a8cd6e3..607d57f 100644 --- a/RespectU/Sources/ViewControllers/Record/RecordViewController.swift +++ b/RespectU/Sources/ViewControllers/Record/RecordViewController.swift @@ -10,32 +10,46 @@ import UIKit import XLPagerTabStrip +/// The record view controller. final class RecordViewController: BaseViewController { + /// The bottom constraint of the scroll view. @IBOutlet weak var scrollViewBottomConstraint: NSLayoutConstraint! + /// The scroll view. @IBOutlet weak var scrollView: UIScrollView! + /// The button bar view. @IBOutlet weak var buttonBar: ButtonBarView! + /// The table view controller representing the all series. private lazy var allTableViewController = RecordAllTableViewController() + /// The table view controller representing the PORTABLE 1 series. private lazy var portable1TableViewController = RecordPortable1TableViewController() + /// The table view controller representing the PORTABLE 2 series. private lazy var portable2TableViewController = RecordPortable2TableViewController() + /// The table view controller representing the RESPECT series. private lazy var respectTableViewController = RecordRespectTableViewController() + /// The table view controller representing the TRILOGY series. private lazy var trilogyTableViewController = RecordTrilogyTableViewController() + /// The table view controller representing the CLAZZIQUAI EDITION series. private lazy var ceTableViewController = RecordCETableViewController() + /// The table view controller representing the TECHNIKA 1 series. private lazy var technika1TableViewController = RecordTechnika1TableViewController() + /// The table view controller representing the BLACK SQUARE series. private lazy var bsTableViewController = RecordBSTableViewController() + /// The table view controller representing the TECHNIKA 2 series. private lazy var technika2TableViewController = RecordTechnika2TableViewController() + /// The table view controller representing the TECHNIKA 3 series. private lazy var technika3TableViewController = RecordTechnika3TableViewController() override func viewDidLoad() { @@ -55,6 +69,7 @@ final class RecordViewController: BaseViewController { ] } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } diff --git a/RespectU/Sources/ViewControllers/SearchRecordDetailViewController.swift b/RespectU/Sources/ViewControllers/SearchRecordDetailViewController.swift index b54137a..efa8ae7 100644 --- a/RespectU/Sources/ViewControllers/SearchRecordDetailViewController.swift +++ b/RespectU/Sources/ViewControllers/SearchRecordDetailViewController.swift @@ -14,6 +14,11 @@ import RealmSwift /// The search record detail view controller. final class SearchRecordDetailViewController: UIViewController { + private enum CellIdentifier { + + static let searchRecordDetail = "searchRecordDetailCell" + } + var methodIndex: Int = 0 var buttonIndex: Int = 0 @@ -42,7 +47,7 @@ final class SearchRecordDetailViewController: UIViewController { tableView.layer.borderWidth = 1 tableView.layer.cornerRadius = 15 tableView.register(UINib(nibName: SearchRecordDetailCell.name, bundle: nil), - forCellReuseIdentifier: "searchRecordDetailCell") + forCellReuseIdentifier: CellIdentifier.searchRecordDetail) let recordResults = RecordInfo.fetch() switch buttonIndex { case 0: @@ -175,21 +180,21 @@ final class SearchRecordDetailViewController: UIViewController { title: result.localizedTitle, difficulty: Difficulty.normal.rawValue, rate: result.button4?.normal?.rate ?? 0) - self.results.append(object) + results.append(object) } if result.button4?.hard?.note == Note.perfectPlay.rawValue { let object = SearchRecordDetail(series: result.series, title: result.localizedTitle, difficulty: Difficulty.hard.rawValue, rate: result.button4?.hard?.rate ?? 0) - self.results.append(object) + results.append(object) } if result.button4?.maximum?.note == Note.perfectPlay.rawValue { let object = SearchRecordDetail(series: result.series, title: result.localizedTitle, difficulty: Difficulty.maximum.rawValue, rate: result.button4?.maximum?.rate ?? 0) - self.results.append(object) + results.append(object) } } } @@ -660,16 +665,19 @@ final class SearchRecordDetailViewController: UIViewController { resultsLabel.text = "\(results.count)\(L10n.results)" } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } } +// MARK: - Conforming UITableViewDataSource + extension SearchRecordDetailViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell - = tableView.dequeueReusableCell(withIdentifier: "searchRecordDetailCell", for: indexPath) + let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier.searchRecordDetail, + for: indexPath) if case let searchRecordDetailCell as SearchRecordDetailCell = cell { searchRecordDetailCell.configure(with: results[indexPath.row]) } @@ -681,6 +689,8 @@ extension SearchRecordDetailViewController: UITableViewDataSource { } } +// MARK: - Conforming UITableViewDelegate + extension SearchRecordDetailViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -688,6 +698,8 @@ extension SearchRecordDetailViewController: UITableViewDelegate { } } +// MARK: - Conforming DZNEmptyDataSetSource + extension SearchRecordDetailViewController: DZNEmptyDataSetSource { func title(forEmptyDataSet scrollView: UIScrollView!) -> NSAttributedString! { @@ -696,6 +708,8 @@ extension SearchRecordDetailViewController: DZNEmptyDataSetSource { } } +// MARK: - Conforming DZNEmptyDataSetDelegate + extension SearchRecordDetailViewController: DZNEmptyDataSetDelegate { func emptyDataSetShouldAllowScroll(_ scrollView: UIScrollView!) -> Bool { diff --git a/RespectU/Sources/ViewControllers/SearchRecordViewController.swift b/RespectU/Sources/ViewControllers/SearchRecordViewController.swift index 4ba5ee9..a3517ff 100644 --- a/RespectU/Sources/ViewControllers/SearchRecordViewController.swift +++ b/RespectU/Sources/ViewControllers/SearchRecordViewController.swift @@ -248,7 +248,9 @@ extension SearchRecordViewController: UIPickerViewDelegate { extension SearchRecordViewController: SearchByRatingViewDelegate { - func didTouchUpDoneButton(_ textFields: [UITextField]) { + func searchByRatingView(_ view: SearchByRatingView, + didTapDoneButton button: UIButton, + with textFields: [UITextField]) { guard let lowerRateTextField = textFields.first else { return } guard let upperRateTextField = textFields.last else { return } if lowerRateTextField.isFirstResponder { @@ -259,14 +261,6 @@ extension SearchRecordViewController: SearchByRatingViewDelegate { setTextFieldText(upperRateTextField) } } - - private func setTextFieldText(_ textField: UITextField) { - guard let text = textField.text else { return } - guard let value = Double(text) else { return } - if value >= 100 { - textField.text = "100" - } - } } // MARK: - Conforming SearchByNoteViewDelegate @@ -330,4 +324,12 @@ private extension SearchRecordViewController { break } } + + private func setTextFieldText(_ textField: UITextField) { + guard let text = textField.text else { return } + guard let value = Double(text) else { return } + if value >= 100 { + textField.text = "100" + } + } } diff --git a/RespectU/Sources/ViewControllers/SignInViewController.swift b/RespectU/Sources/ViewControllers/SignInViewController.swift index 4333229..94c88b6 100644 --- a/RespectU/Sources/ViewControllers/SignInViewController.swift +++ b/RespectU/Sources/ViewControllers/SignInViewController.swift @@ -10,42 +10,54 @@ import UIKit import SwiftKeychainWrapper +/// The sign in view controller. final class SignInViewController: UIViewController { - let apiService: APIServiceType = APIService() + /// The api service. + private let apiService: APIServiceType = APIService() + /// The id text field. @IBOutlet private weak var idTextField: UITextField! + /// The password text field. @IBOutlet private weak var passwordTextField: UITextField! + /// The sign in button. @IBOutlet private weak var signInButton: UIButton! + /// The sign up button. @IBOutlet private weak var signUpButton: UIButton! + /// The skip button. @IBOutlet private weak var skipButton: UIButton! + /// The description label. @IBOutlet private weak var descriptionLabel: UILabel! + /// The booealn value indicating whether all the text fields have value. private var isAllTextFieldsEntered: Bool { guard let isIdTextFieldEmpty = idTextField.text?.isEmpty else { return true } guard let isPasswordTextFieldEmpty = passwordTextField.text?.isEmpty else { return true } return !(isIdTextFieldEmpty || isPasswordTextFieldEmpty) } + /// The id. private var id: String { return idTextField.text ?? "" } + /// The password. private var password: String { return passwordTextField.text ?? "" } override func viewDidLoad() { super.viewDidLoad() - setup() + configure() } - private func setup() { + /// Configures initial settings. + private func configure() { idTextField.placeholder = L10n.id passwordTextField.placeholder = L10n.password signInButton.setTitle(L10n.signIn, for: []) @@ -54,11 +66,11 @@ final class SignInViewController: UIViewController { signInButton.addTarget(self, action: #selector(signInButtonDidTap(_:)), for: .touchUpInside) signUpButton.addTarget(self, action: #selector(signUpButtonDidTap(_:)), for: .touchUpInside) skipButton.addTarget(self, action: #selector(skipButtonDidTap(_:)), for: .touchUpInside) - let tapGestureRecognizer - = UITapGestureRecognizer(target: self, action: #selector(superViewDidTap(_:))) - view.addGestureRecognizer(tapGestureRecognizer) + view.addGestureRecognizer(UITapGestureRecognizer(target: self, + action: #selector(superViewDidTap(_:)))) } + /// Tells the `sender` that the sign in button is tapped. @objc private func signInButtonDidTap(_ sender: UIButton) { if isAllTextFieldsEntered { apiService.requestSignIn(id: id, password: password) { [weak self] statusCode, error in @@ -119,11 +131,13 @@ final class SignInViewController: UIViewController { } } + /// Tells the `sender` that the sign up button is tapped. @objc private func signUpButtonDidTap(_ sender: UIButton) { let controller = StoryboardScene.SignIn.signInViewController.instantiate() navigationController?.pushViewController(controller, animated: true) } + /// Tells the `sender` that the skip button is tapped. @objc private func skipButtonDidTap(_ sender: UIButton) { if presentingViewController is UINavigationController { dismiss(animated: true, completion: nil) @@ -132,11 +146,14 @@ final class SignInViewController: UIViewController { } } + /// Tells the `recognizer` that the super view is tapped. @objc private func superViewDidTap(_ recognizer: UIGestureRecognizer) { view.endEditing(true) } } +// MARK: - Conforming UITextFieldDelegate + extension SignInViewController: UITextFieldDelegate { func textFieldShouldReturn(_ textField: UITextField) -> Bool { @@ -154,6 +171,7 @@ extension SignInViewController: UITextFieldDelegate { private extension SignInViewController { + /// Presents next view controller. func presentNextViewController() { if TipInfo.fetch().count == 0 { let controller = StoryboardScene.Init.initViewController.instantiate().then { diff --git a/RespectU/Sources/ViewControllers/SignUpViewController.swift b/RespectU/Sources/ViewControllers/SignUpViewController.swift index a1cdb0f..7c9d173 100644 --- a/RespectU/Sources/ViewControllers/SignUpViewController.swift +++ b/RespectU/Sources/ViewControllers/SignUpViewController.swift @@ -8,18 +8,25 @@ import UIKit +/// The sign up view controller. final class SignUpViewController: UIViewController { + /// The api service. private let apiService: APIServiceType = APIService() + /// The id text field. @IBOutlet private weak var idTextField: SignInTextField! + /// The password text field. @IBOutlet private weak var passwordTextField: SignInTextField! + /// The nickname text field. @IBOutlet private weak var nicknameTextField: SignInTextField! + /// The sign up button. @IBOutlet private weak var signUpButton: UIButton! + /// The boolean value indicating whether all the textfields have a value. private var isAllTextFieldsEntered: Bool { guard let isIdTextFieldEmpty = idTextField.text?.isEmpty else { return true } guard let isPasswordTextFieldEmpty = passwordTextField.text?.isEmpty else { return true } @@ -27,24 +34,28 @@ final class SignUpViewController: UIViewController { return !(isIdTextFieldEmpty || isPasswordTextFieldEmpty || isNicknameTextFieldEmpty) } + /// The id. private var id: String { return idTextField.text ?? "" } + /// The password. private var password: String { return passwordTextField.text ?? "" } + /// The nickname. private var nickname: String { return nicknameTextField.text ?? "" } override func viewDidLoad() { super.viewDidLoad() - setup() + configure() } - private func setup() { + /// Configures initial settings. + private func configure() { idTextField.placeholder = L10n.id passwordTextField.placeholder = L10n.password nicknameTextField.placeholder = L10n.nickname @@ -54,14 +65,17 @@ final class SignUpViewController: UIViewController { action: #selector(superViewDidTap(_:)))) } + /// Tells the `sender` that the back button is tapped. @IBAction private func backButtonDidTap(_ sender: UIButton) { navigationController?.popViewController(animated: true) } + /// Tells the `recognizer` that the super view is tapped. @objc private func superViewDidTap(_ recognizer: UIGestureRecognizer) { - self.view.endEditing(true) + view.endEditing(true) } + /// Tells the `sender` that the sign up button is tapped. @objc private func signUpButtonDidTap(_ sender: UIButton) { if isAllTextFieldsEntered { apiService diff --git a/RespectU/Sources/ViewControllers/SkillLevelDetailViewController.swift b/RespectU/Sources/ViewControllers/SkillLevelDetailViewController.swift index 87b1e64..5145a59 100644 --- a/RespectU/Sources/ViewControllers/SkillLevelDetailViewController.swift +++ b/RespectU/Sources/ViewControllers/SkillLevelDetailViewController.swift @@ -30,6 +30,7 @@ final class SkillLevelDetailViewController: UIViewController { configure() } + /// Configures initial settings. private func configure() { guard let button4View = UIView.instantiateFromXIB(xibName: SkillLevelDetailView.name) as? SkillLevelDetailView @@ -50,7 +51,7 @@ final class SkillLevelDetailViewController: UIViewController { button6BackgroundView, button8BackgroundView ].compactMap { $0 } - let buttons: [Button] = [.button4, .button5, .button6, .button8] + let buttons = Button.all recordViews.indices.forEach { index in let recordView = recordViews[index] let backgroundView = backgroundViews[index] diff --git a/RespectU/Sources/ViewControllers/Song/SongBaseTableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongBaseTableViewController.swift index 9aa0638..9c041e9 100644 --- a/RespectU/Sources/ViewControllers/Song/SongBaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongBaseTableViewController.swift @@ -13,19 +13,16 @@ import RealmSwift /// The base song table view controller. class SongBaseTableViewController: UITableViewController { + /// The fetched song results. var songResults: [SongInfo]? + /// The fetched mission results. var missionResults: Results? + /// The fetched achievement results. var achievementResults: Results? - var favoriteButton: Button { - let buttonString = UserDefaults.standard.string(forKey: "favoriteButton") ?? "4b" - return Button(rawValue: buttonString) ?? .button4 - } - - let myBPM = UserDefaults.standard.double(forKey: "bpm") - + /// The cell identifier. let cellIdentifier = "songCell" override func viewDidLoad() { @@ -33,6 +30,7 @@ class SongBaseTableViewController: UITableViewController { setup() } + /// Configures initial settings. private func setup() { songResults = SongInfo.fetch().sorted { $0.localizedLowercase < $1.localizedLowercase } let predicate = NSPredicate(format: "%K LIKE %@", @@ -48,6 +46,8 @@ class SongBaseTableViewController: UITableViewController { } } +// MARK: - UITableView Configuration + extension SongBaseTableViewController { override func tableView(_ tableView: UITableView, @@ -55,6 +55,7 @@ extension SongBaseTableViewController { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) cell.contentView.backgroundColor = .clear if case let songCell as SongCell = cell { + let favoriteButton = Persistence.favoriteButton let result = songResults?[indexPath.row] songCell.configure(with: result, favoriteButton: favoriteButton) } @@ -76,6 +77,7 @@ extension SongBaseTableViewController { } else { bpm = object.bpm } + let myBPM = Persistence.bpm let speed = Utils.convertToRecommendedSpeed(by: myBPM / Double(bpm)) ?? "" let unlockAchievement = L10n.unlockACHIEVEMENT let unlockMission = L10n.unlockMISSION diff --git a/RespectU/Sources/ViewControllers/Song/SongCETableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongCETableViewController.swift index 1afdaf8..d7f772e 100644 --- a/RespectU/Sources/ViewControllers/Song/SongCETableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongCETableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the CLAZZIQUAI EDITION series. final class SongCETableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongCETableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongCETableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongPortable1TableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongPortable1TableViewController.swift index 83cc6eb..ab779b3 100644 --- a/RespectU/Sources/ViewControllers/Song/SongPortable1TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongPortable1TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the PORTABLE 1 series. final class SongPortable1TableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongPortable1TableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongPortable1TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongPortable2TableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongPortable2TableViewController.swift index 5dc720e..332e451 100644 --- a/RespectU/Sources/ViewControllers/Song/SongPortable2TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongPortable2TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the PORTABLE 2 series. final class SongPortable2TableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongPortable2TableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongPortable2TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongRespectTableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongRespectTableViewController.swift index 175297d..951a163 100644 --- a/RespectU/Sources/ViewControllers/Song/SongRespectTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongRespectTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the RESPECT series. final class SongRespectTableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongRespectTableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongRespectTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongTechnika1TableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongTechnika1TableViewController.swift index 687cb0c..8c60006 100644 --- a/RespectU/Sources/ViewControllers/Song/SongTechnika1TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongTechnika1TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the TECHNIKA 1 series. final class SongTechnika1TableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongTechnika1TableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongTechnika1TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongTechnika2TableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongTechnika2TableViewController.swift index 389e313..1690b0e 100644 --- a/RespectU/Sources/ViewControllers/Song/SongTechnika2TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongTechnika2TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the TECHNIKA 2 series. final class SongTechnika2TableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongTechnika2TableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongTechnika2TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongTechnika3TableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongTechnika3TableViewController.swift index 693e169..e74391a 100644 --- a/RespectU/Sources/ViewControllers/Song/SongTechnika3TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongTechnika3TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the TECHNIKA 3 series. final class SongTechnika3TableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongTechnika3TableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongTechnika3TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongTrilogyTableViewController.swift b/RespectU/Sources/ViewControllers/Song/SongTrilogyTableViewController.swift index 92c17bc..08b9e46 100644 --- a/RespectU/Sources/ViewControllers/Song/SongTrilogyTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongTrilogyTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The song table view controller about the TRILOGY series. final class SongTrilogyTableViewController: SongBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class SongTrilogyTableViewController: SongBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension SongTrilogyTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Song/SongViewController.swift b/RespectU/Sources/ViewControllers/Song/SongViewController.swift index e8ae1f0..46eac19 100644 --- a/RespectU/Sources/ViewControllers/Song/SongViewController.swift +++ b/RespectU/Sources/ViewControllers/Song/SongViewController.swift @@ -11,36 +11,45 @@ import UIKit import RealmSwift import XLPagerTabStrip +/// The song view controller. final class SongViewController: BaseViewController { + /// The label representing the selected button. @IBOutlet weak var selectedButtonLabel: UILabel! + /// The table view controller representing the all series. private lazy var allTableViewController = SongAllTableViewController() + /// The table view controller representing the PORTABLE 1 series. private lazy var portable1TableViewController = SongPortable1TableViewController() + /// The table view controller representing the PORTABLE 2 series. private lazy var portable2TableViewController = SongPortable2TableViewController() + /// The table view controller representing the RESPECT series. private lazy var respectTableViewController = SongRespectTableViewController() + /// The table view controller representing the TRILOGY series. private lazy var trilogyTableViewController = SongTrilogyTableViewController() + /// The table view controller representing the CLAZZIQUAI EDITION series. private lazy var ceTableViewController = SongCETableViewController() + /// The table view controller representing the TECHNIKA 1 series. private lazy var technika1TableViewController = SongTechnika1TableViewController() + /// The table view controller representing the BLACK SQUARE series. private lazy var bsTableViewController = SongBSTableViewController() + /// The table view controller representing the TECHNIKA 2 series. private lazy var technika2TableViewController = SongTechnika2TableViewController() - var favoriteButton: Button { - return Button(rawValue: selectedButtonLabel.text ?? "") ?? .button4 - } + /// The table view controller representing the TECHNIKA 3 series. + private lazy var technika3TableViewController = SongTechnika3TableViewController() override func viewDidLoad() { super.viewDidLoad() - selectedButtonLabel.text - = (UserDefaults.standard.string(forKey: "favoriteButton") ?? "4b").uppercased() + selectedButtonLabel.text = Persistence.favoriteButton.rawValue.uppercased() } override func viewControllers( @@ -59,29 +68,31 @@ final class SongViewController: BaseViewController { ] } + /// Tells the `sender` that the search button is tapped. @IBAction private func searchButtonDidTap(_ sender: UIButton) { UIAlertController .alert(title: L10n.search, message: L10n.selectTheButtonType) .action(title: Button.button4.rawValue.uppercased()) { [weak self] _ in - self?.setFavoriteButton(.button4) + Persistence.favoriteButton = .button4 self?.reloadAllTableView() } .action(title: Button.button5.rawValue.uppercased()) { [weak self] _ in - self?.setFavoriteButton(.button5) + Persistence.favoriteButton = .button5 self?.reloadAllTableView() } .action(title: Button.button6.rawValue.uppercased()) { [weak self] _ in - self?.setFavoriteButton(.button6) + Persistence.favoriteButton = .button6 self?.reloadAllTableView() } .action(title: Button.button8.rawValue.uppercased()) { [weak self] _ in - self?.setFavoriteButton(.button8) + Persistence.favoriteButton = .button8 self?.reloadAllTableView() } .action(title: L10n.cancel, style: .cancel) .present(to: self) } + /// Tells the `sender` that the sort button is tapped. @IBAction private func sortButtonDidTap(_ sender: UIButton) { UIAlertController .alert(title: L10n.sort, message: L10n.selectTheSortMethod) @@ -107,15 +118,16 @@ final class SongViewController: BaseViewController { .present(to: self) } + /// Tells the `sender` that the random button is tapped. @IBAction private func randomButtonDidTap(_ sender: UIButton) { guard let results = allTableViewController.songResults else { return } let random = Int(arc4random_uniform(UInt32(results.count - 1))) let object = results[random] - let myBpm = UserDefaults.standard.double(forKey: "bpm") - let speed = Utils.convertToRecommendedSpeed(by: myBpm / Double(object.bpm)) ?? "" - var message = "\(object.series.uppercased())\n\n" + "SPEED Recommendation".localized + "\n\(speed)" + let myBPM = Persistence.bpm + let speed = Utils.convertToRecommendedSpeed(by: myBPM / Double(object.bpm)) ?? "" + var message = "\(object.series.uppercased())\n\n\(L10n.speedRecommendation)\n\(speed)" if object.subBPM.value != nil { - message += "\n" + "(SPEED Variation)".localized + message += "\n\(L10n.speedVariation)" } UIAlertController .alert(title: object.localizedTitle, message: message) @@ -123,6 +135,7 @@ final class SongViewController: BaseViewController { .present(to: self) } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } @@ -132,38 +145,30 @@ final class SongViewController: BaseViewController { private extension SongViewController { - func sort(byDifficulty difficulty: Difficulty, ascending isAscending: Bool) { + /// Sorts songs by `difficulty`, in `ascending` order. + /// + /// - Parameters: + /// - difficulty: The specific difficulty. + /// - ascending: The boolean value indicating whether sorting in ascending order. + func sort(byDifficulty difficulty: Difficulty, ascending: Bool) { if let songViewControllers = viewControllers as? [SongBaseTableViewController] { for viewController in songViewControllers { viewController.songResults?.sort { first, second in - guard let button = favoriteButton.expansion else { return false } - guard let firstValue = first.value(forKeyPath: "\(button).\(difficulty.rawValue)") as? Int + guard let button = Persistence.favoriteButton.expansion else { return false } + guard let firstValue + = first.value(forKeyPath: "\(button).\(difficulty.rawValue)") as? Int else { return false } - guard let secondValue = second.value(forKeyPath: "\(button).\(difficulty.rawValue)") as? Int + guard let secondValue + = second.value(forKeyPath: "\(button).\(difficulty.rawValue)") as? Int else { return false } - return isAscending ? firstValue < secondValue : firstValue > secondValue + return ascending ? firstValue < secondValue : firstValue > secondValue } } reloadAllTableView() } } - func setFavoriteButton(_ button: Button) { - if let songViewControllers = viewControllers as? [SongBaseTableViewController] { - for viewController in songViewControllers { - viewController.favoriteButton = button.rawValue - } - } - selectedButtonLabel.text = button.rawValue.uppercased() - } - -// func setFavoriteButton(_ button: String) { -// for viewController in songViewControllers { -// viewController.favoriteButton = button -// } -// self.selectedButtonLabel.text = button.uppercased() -// } - + /// Reloads all table views. func reloadAllTableView() { DispatchQueue.main.async { [weak self] in guard let self = self else { return } @@ -174,13 +179,4 @@ private extension SongViewController { } } } - -// func reloadAllTableViews() { -// DispatchQueue.main.async { [weak self] in -// guard let viewControllers = self?.songViewControllers else { return } -// for viewController in viewControllers { -// viewController.tableView.reloadSections(IndexSet(0...0), with: .automatic) -// } -// } -// } } diff --git a/RespectU/Sources/ViewControllers/SummaryDetailViewController.swift b/RespectU/Sources/ViewControllers/SummaryDetailViewController.swift index 58b30a1..e477f64 100644 --- a/RespectU/Sources/ViewControllers/SummaryDetailViewController.swift +++ b/RespectU/Sources/ViewControllers/SummaryDetailViewController.swift @@ -22,8 +22,10 @@ final class SummaryDetailViewController: UIViewController { 11 : The number of patterns that recorded */ + /// The `enum` that defines formats. private enum Format { + /// The format for representing average. static let average = "%05.2f%%" } @@ -75,6 +77,7 @@ final class SummaryDetailViewController: UIViewController { calculateAllValuesAndReloadSubviews() } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } @@ -87,8 +90,8 @@ private extension SummaryDetailViewController { func calculateAllValuesAndReloadSubviews() { DispatchQueue.global().async { [weak self] in guard let self = self else { return } - let buttons = ["button4", "button5", "button6", "button8"] - let difficulties = ["normal", "hard", "maximum"] + let buttons = Button.all.map { $0.expansion }.compactMap { $0 } + let difficulties = Difficulty.all.map { $0.rawValue } self.songResults = SongInfo.fetch().sorted(byKeyPath: "title.english") self.recordResults = RecordInfo.fetch().sorted(byKeyPath: "title.english") zip(self.songResults, self.recordResults).forEach { songResult, recordResult in @@ -99,7 +102,9 @@ private extension SummaryDetailViewController { guard let recordButtonKeyPath = recordResult.value(forKeyPath: button) as? RecordButtonInfo else { return } for difficulty in difficulties { - guard let level = songButtonKeyPath.value(forKeyPath: difficulty) as? Int else { return } + guard let level + = songButtonKeyPath.value(forKeyPath: difficulty) as? Int + else { return } if level != 0 { guard let recordKeyPath = recordButtonKeyPath.value(forKeyPath: difficulty) as? RecordDifficultyInfo @@ -265,23 +270,37 @@ private extension SummaryDetailViewController { } } } - (self.button4Values[10], self.button5Values[10], self.button6Values[10], self.button8Values[10]) + (self.button4Values[10], + self.button5Values[10], + self.button6Values[10], + self.button8Values[10]) = self.numberOfTotalPatterns() for index in 0..<12 { self.allValues[index] - = self.button4Values[index] + self.button5Values[index] + self.button6Values[index] + self.button8Values[index] + = self.button4Values[index] + + self.button5Values[index] + + self.button6Values[index] + + self.button8Values[index] } self.ratingValues[0] = self.ratingValues[0] / Double(self.button4Values[11]) self.ratingValues[1] = self.ratingValues[1] / Double(self.button5Values[11]) self.ratingValues[2] = self.ratingValues[2] / Double(self.button6Values[11]) self.ratingValues[3] = self.ratingValues[3] / Double(self.button8Values[11]) - self.ratingValues[4] = (self.ratingValues[0] + self.ratingValues[1] + self.ratingValues[2] + self.ratingValues[3]) / 4 + self.ratingValues[4] + = (self.ratingValues[0] + + self.ratingValues[1] + + self.ratingValues[2] + + self.ratingValues[3]) / 4 let count = self.button4StackView.arrangedSubviews.count for index in 1.. (Int, Int, Int, Int) { var (button4, button5, button6, button8) = (0, 0, 0, 0) for result in songResults { - let buttons = ["button4", "button5", "button6", "button8"] - let difficulties = ["normal", "hard", "maximum"] + let buttons = Button.all.map { $0.expansion }.compactMap { $0 } + let difficulties = Difficulty.all.map { $0.rawValue } buttons.enumerated().forEach { index, button in guard let buttonKeyPath = result.value(forKeyPath: button) as? SongButtonInfo else { return } diff --git a/RespectU/Sources/ViewControllers/TipViewController.swift b/RespectU/Sources/ViewControllers/TipViewController.swift index 6bc7ff3..7eb39bc 100644 --- a/RespectU/Sources/ViewControllers/TipViewController.swift +++ b/RespectU/Sources/ViewControllers/TipViewController.swift @@ -10,62 +10,84 @@ import UIKit import RealmSwift +/// The tip view controller. final class TipViewController: UIViewController { - @IBOutlet weak var tableView: UITableView! + /// The generated indexes. + private var indexes = [Int]() - var indexes = [Int]() + /// The fetched tips. + private var results: Results? - var results: Results? + /// The cell identifier. + private let cellIdentifier = "tipCell" + + /// The table view. + @IBOutlet private weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() + configure() + } + + /// Configures initial settings. + private func configure() { results = TipInfo.fetch() generateRandomNumbers() setupTableView() } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } } -extension TipViewController { - - private func generateRandomNumbers() { - guard let tips = self.results else { return } - var randomNumber = Int.random(in: 0.. UITableViewCell { - guard let cell = tableView.dequeueReusableCell(withIdentifier: "tipCell") else { return UITableViewCell() } - cell.textLabel?.text = self.results?[indexes[indexPath.row]].localizedTitle + func tableView(_ tableView: UITableView, + cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) + cell.textLabel?.text = results?[indexes[indexPath.row]].localizedTitle return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return self.results?.count ?? 0 + return results?.count ?? 0 } } +// MARK: - Conforming UITableViewDelegate + extension TipViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) } } + +// MARK: - Private Method + +private extension TipViewController { + + func generateRandomNumbers() { + guard let tips = self.results else { return } + var randomNumber = Int.random(in: 0.. $1.button4?.skillPoint ?? 0 } } +} + +// MARK: - UITableView Configuration + +extension Top504BTableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -28,6 +34,8 @@ final class Top504BTableViewController: Top50BaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Top504BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Top50/Top505BTableViewController.swift b/RespectU/Sources/ViewControllers/Top50/Top505BTableViewController.swift index 687d0f6..c1e64d7 100644 --- a/RespectU/Sources/ViewControllers/Top50/Top505BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Top50/Top505BTableViewController.swift @@ -10,12 +10,18 @@ import UIKit import XLPagerTabStrip +/// The top50 table view controller about the 5B. final class Top505BTableViewController: Top50BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() results = tempResults.sorted { $0.button5?.skillPoint ?? 0 > $1.button5?.skillPoint ?? 0 } } +} + +// MARK: - UITableView Configuration + +extension Top505BTableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -28,6 +34,8 @@ final class Top505BTableViewController: Top50BaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Top505BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Top50/Top506BTableViewController.swift b/RespectU/Sources/ViewControllers/Top50/Top506BTableViewController.swift index cff694c..d35e3c2 100644 --- a/RespectU/Sources/ViewControllers/Top50/Top506BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Top50/Top506BTableViewController.swift @@ -10,12 +10,18 @@ import UIKit import XLPagerTabStrip +/// The top50 table view controller about the 6B. final class Top506BTableViewController: Top50BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() results = tempResults.sorted { $0.button6?.skillPoint ?? 0 > $1.button6?.skillPoint ?? 0 } } +} + +// MARK: - UITableView Configuration + +extension Top506BTableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -28,6 +34,8 @@ final class Top506BTableViewController: Top50BaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Top506BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Top50/Top508BTableViewController.swift b/RespectU/Sources/ViewControllers/Top50/Top508BTableViewController.swift index a19ea53..2ed4795 100644 --- a/RespectU/Sources/ViewControllers/Top50/Top508BTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Top50/Top508BTableViewController.swift @@ -10,12 +10,18 @@ import UIKit import XLPagerTabStrip +/// The top50 table view controller about the 8B. final class Top508BTableViewController: Top50BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() results = tempResults.sorted { $0.button8?.skillPoint ?? 0 > $1.button8?.skillPoint ?? 0 } } +} + +// MARK: - UITableView Configuration + +extension Top508BTableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -28,6 +34,8 @@ final class Top508BTableViewController: Top50BaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension Top508BTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Top50/Top50BaseTableViewController.swift b/RespectU/Sources/ViewControllers/Top50/Top50BaseTableViewController.swift index d3f72f4..514436d 100644 --- a/RespectU/Sources/ViewControllers/Top50/Top50BaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Top50/Top50BaseTableViewController.swift @@ -7,18 +7,28 @@ // import UIKit + import RealmSwift +/// The top50 base table view controller. class Top50BaseTableViewController: UITableViewController { + /// The fetched temperature record results. var tempResults: Results! + /// The processed record results. var results: [RecordInfo]! + /// The cell identifier. let cellIdentifier = "top50Cell" override func viewDidLoad() { super.viewDidLoad() + configure() + } + + /// Configures initial settings. + private func configure() { tempResults = RecordInfo.fetch() tableView.showsVerticalScrollIndicator = false tableView.separatorStyle = .none @@ -26,6 +36,11 @@ class Top50BaseTableViewController: UITableViewController { tableView.register(UINib(nibName: Top50Cell.name, bundle: nil), forCellReuseIdentifier: cellIdentifier) } +} + +// MARK: - UITableView Configuration + +extension Top50BaseTableViewController { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 50 diff --git a/RespectU/Sources/ViewControllers/Top50/Top50ViewController.swift b/RespectU/Sources/ViewControllers/Top50/Top50ViewController.swift index f53bd23..e065ec8 100644 --- a/RespectU/Sources/ViewControllers/Top50/Top50ViewController.swift +++ b/RespectU/Sources/ViewControllers/Top50/Top50ViewController.swift @@ -10,14 +10,19 @@ import UIKit import XLPagerTabStrip +/// The top50 view controller. final class Top50ViewController: BaseViewController { + /// The table view about the 4B. private lazy var button4TableViewController = Top504BTableViewController() + /// The table view about the 5B. private lazy var button5TableViewController = Top505BTableViewController() + /// The table view about the 6B. private lazy var button6TableViewController = Top506BTableViewController() + /// The table view about the 8B. private lazy var button8TableViewController = Top508BTableViewController() override func viewControllers( @@ -31,6 +36,7 @@ final class Top50ViewController: BaseViewController { ] } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyBSTableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyBSTableViewController.swift index 50a2231..5526e78 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyBSTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyBSTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the BLACK SQUARE series. final class TrophyBSTableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyBSTableViewController: TrophyBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyBSTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyBaseTableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyBaseTableViewController.swift index e28f91d..3fa75e8 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyBaseTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyBaseTableViewController.swift @@ -10,10 +10,13 @@ import UIKit import RealmSwift +/// The trophy base table view controller. class TrophyBaseTableViewController: UITableViewController { + /// The fetched trophy results. var results: Results? + /// The cell identifier. let cellIdentifier = "trophyCell" override func viewDidLoad() { @@ -21,6 +24,7 @@ class TrophyBaseTableViewController: UITableViewController { configure() } + /// Configures initial settings. private func configure() { tableView.rowHeight = 60 tableView.showsVerticalScrollIndicator = false @@ -30,6 +34,8 @@ class TrophyBaseTableViewController: UITableViewController { } } +// MARK: - UITableView Configuration + extension TrophyBaseTableViewController { override func tableView(_ tableView: UITableView, diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyCETableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyCETableViewController.swift index b426701..d911291 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyCETableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyCETableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the CLAZZIQUAI EDITION series. final class TrophyCETableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyCETableViewController: TrophyBaseTableViewController { } } +// MARK: - UITableView Configuration + extension TrophyCETableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -31,6 +34,8 @@ extension TrophyCETableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyCETableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyLinkDiskTableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyLinkDiskTableViewController.swift index 0692571..570060d 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyLinkDiskTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyLinkDiskTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the LINK DISK series. final class TrophyLinkDiskTableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyLinkDiskTableViewController: TrophyBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyLinkDiskTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyRespectTableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyRespectTableViewController.swift index c74df71..a9fb304 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyRespectTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyRespectTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the RESPECT series. final class TrophyRespectTableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyRespectTableViewController: TrophyBaseTableViewController { } } +// MARK: - UITableView Configuration + extension TrophyRespectTableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -44,6 +47,8 @@ extension TrophyRespectTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyRespectTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika1TableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika1TableViewController.swift index d6f4e50..c7af4f1 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika1TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika1TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the TECHNIKA 1 series. final class TrophyTechnika1TableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyTechnika1TableViewController: TrophyBaseTableViewController { } } +// MARK: - UITableView Configuration + extension TrophyTechnika1TableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -31,6 +34,8 @@ extension TrophyTechnika1TableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyTechnika1TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika2TableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika2TableViewController.swift index d98f3f2..2cd1b77 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika2TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika2TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the TECHNIKA 2 series. final class TrophyTechnika2TableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyTechnika2TableViewController: TrophyBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyTechnika2TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika3TableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika3TableViewController.swift index 7d2b8ac..bffa63f 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika3TableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyTechnika3TableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the TECHNIKA 3 series. final class TrophyTechnika3TableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyTechnika3TableViewController: TrophyBaseTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyTechnika3TableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyTrilogyTableViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyTrilogyTableViewController.swift index 1d084e1..cb09d5e 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyTrilogyTableViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyTrilogyTableViewController.swift @@ -10,6 +10,7 @@ import UIKit import XLPagerTabStrip +/// The trophy table view controller about the TRILOGY series. final class TrophyTrilogyTableViewController: TrophyBaseTableViewController { override func viewDidLoad() { @@ -18,6 +19,8 @@ final class TrophyTrilogyTableViewController: TrophyBaseTableViewController { } } +// MARK: - UITableView Configuration + extension TrophyTrilogyTableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -31,6 +34,8 @@ extension TrophyTrilogyTableViewController { } } +// MARK: - Conforming IndicatorInfoProvider + extension TrophyTrilogyTableViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { diff --git a/RespectU/Sources/ViewControllers/Trophy/TrophyViewController.swift b/RespectU/Sources/ViewControllers/Trophy/TrophyViewController.swift index 21d34f0..e731493 100644 --- a/RespectU/Sources/ViewControllers/Trophy/TrophyViewController.swift +++ b/RespectU/Sources/ViewControllers/Trophy/TrophyViewController.swift @@ -10,22 +10,31 @@ import UIKit import XLPagerTabStrip +/// The trophy view controller. final class TrophyViewController: BaseViewController { + /// The table view controller representing the RESPECT series. private lazy var respectTableViewController = TrophyRespectTableViewController() + /// The table view controller representing the TRILOGY series. private lazy var trilogyTableViewController = TrophyTrilogyTableViewController() + /// The table view controller representing the CLAZZIQUAI EDITION series. private lazy var ceTableViewController = TrophyCETableViewController() + /// The table view controller representing the TECHNIKA 1 series. private lazy var technika1TableViewController = TrophyTechnika1TableViewController() + /// The table view controller representing the BLACK SQUARE series. private lazy var bsTableViewController = TrophyBSTableViewController() + /// The table view controller representing the LINK DISK series. private lazy var linkDiskTableViewController = TrophyLinkDiskTableViewController() + /// The table view controller representing the TECHNIKA 2 series. private lazy var technika2TableViewController = TrophyTechnika2TableViewController() + /// The table view controller representing the TECNNIKA 3 series. private lazy var technika3TableViewController = TrophyTechnika3TableViewController() override func viewControllers( @@ -43,6 +52,7 @@ final class TrophyViewController: BaseViewController { ] } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } diff --git a/RespectU/Sources/ViewControllers/UploadViewController.swift b/RespectU/Sources/ViewControllers/UploadViewController.swift index 54fa854..d8d4924 100644 --- a/RespectU/Sources/ViewControllers/UploadViewController.swift +++ b/RespectU/Sources/ViewControllers/UploadViewController.swift @@ -11,26 +11,32 @@ import UIKit import SVProgressHUD import SwiftKeychainWrapper +/// The upload view controller. final class UploadViewController: UIViewController { + /// The api service. private let apiService: APIServiceType = APIService() + /// The upload label. @IBOutlet private weak var uploadLabel: UILabel! + /// The upload button. @IBOutlet private weak var uploadButton: UIButton! override func viewDidLoad() { super.viewDidLoad() - setup() + configure() } - private func setup() { + /// Configures initial settings. + private func configure() { uploadLabel.text = L10n.storeRecordedPerformanceInformationOnTheServer uploadButton.setTitle(L10n.upload, for: []) uploadButton.addTarget(self, action: #selector(uploadButtonDidTap(_:)), for: .touchUpInside) } - @objc func uploadButtonDidTap(_ sender: UIButton) { + /// Tells the `sender` that the upload button is tapped. + @objc private func uploadButtonDidTap(_ sender: UIButton) { let id = KeychainWrapper.standard.string(forKey: "id") ?? "" if id.isEmpty { UIAlertController @@ -149,6 +155,7 @@ final class UploadViewController: UIViewController { } } + /// Tells the `sender` that the cancel button is tapped. @IBAction private func cancelButtonDidTap(_ sender: UIButton) { dismiss(animated: true, completion: nil) } @@ -158,6 +165,7 @@ final class UploadViewController: UIViewController { private extension UploadViewController { + /// Presents alert representing the task is completed successfully. func presentSuccessAlert() { DispatchQueue.main.async { [weak self] in SVProgressHUD.dismiss() @@ -168,6 +176,7 @@ private extension UploadViewController { } } + /// Presents alert representing the task is completed with some error. func presentFailureAlert() { DispatchQueue.main.async { [weak self] in SVProgressHUD.dismiss() diff --git a/RespectU/Sources/Views/MissionCell.swift b/RespectU/Sources/Views/MissionCell.swift index 4f6f45c..8e26da5 100644 --- a/RespectU/Sources/Views/MissionCell.swift +++ b/RespectU/Sources/Views/MissionCell.swift @@ -40,10 +40,30 @@ final class MissionCell: UITableViewCell { /// - Parameter missionInfo: The mission information. func configure(with missionInfo: MissionInfo?) { guard let missionInfo = missionInfo else { return } - let gradient = missionInfo.section.missionGradient(.vertical) ?? CAGradientLayer() + let series = missionInfo.seriesEnum ?? .respect + let section = missionInfo.section + let gradient = MissionSection + .makeSection(bySeries: series, section: section)? + .makeGradient(by: .vertical) ?? CAGradientLayer() gradient.frame = colorLabel.bounds colorLabel.layer.addSublayer(gradient) titleLabel.text = missionInfo.title rewardLabel.text = missionInfo.localizedReward } + + func colorizeSubviews(inSeries series: Series, section: String) { + let missionSection = MissionSection.makeSection(bySeries: series, section: section) + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.contentView.backgroundColor = missionSection?.color + self.allLabel.forEach { $0.textColor = .white } + } + } + + func decolorizeSubviews() { + DispatchQueue.main.async { [weak self] in + self?.contentView.backgroundColor = .white + self?.allLabel.forEach { $0.textColor = .black50 } + } + } } diff --git a/RespectU/Sources/Views/RecordCell.swift b/RespectU/Sources/Views/RecordCell.swift index 5400d37..80370cf 100644 --- a/RespectU/Sources/Views/RecordCell.swift +++ b/RespectU/Sources/Views/RecordCell.swift @@ -36,11 +36,51 @@ final class RecordCell: UITableViewCell { titleLabel.text = songInfo.localizedTitle } + /// Colorizes subviews. + /// + /// - Parameter series: The specific series. func colorizeSubviews(in series: Series) { - + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + switch series { + case .portable1: + self.contentView.backgroundColor = .portable1 + self.titleLabel.textColor = .white + case .portable2: + self.contentView.backgroundColor = .portable2 + self.titleLabel.textColor = .white + case .respect: + self.contentView.backgroundColor = .respect + self.titleLabel.textColor = .white + case .trilogy: + self.contentView.backgroundColor = .trilogy + self.titleLabel.textColor = .white + case .ce: + self.contentView.backgroundColor = .ce + self.titleLabel.textColor = .black50 + case .technika1: + self.contentView.backgroundColor = .technika1 + self.titleLabel.textColor = .white + case .bs: + self.contentView.backgroundColor = .bs + self.titleLabel.textColor = .white + case .technika2: + self.contentView.backgroundColor = .technika2 + self.titleLabel.textColor = .black50 + case .technika3: + break + default: + break + } } } + /// Decolorizes subviews. + /// + /// Reset all the colors of subviews. func decolorizeSubviews() { - + DispatchQueue.main.async { [weak self] in + self?.contentView.backgroundColor = .white + self?.titleLabel.textColor = .black50 + } } } diff --git a/RespectU/Sources/Views/RecordView.swift b/RespectU/Sources/Views/RecordView.swift index 546ca2b..009dace 100644 --- a/RespectU/Sources/Views/RecordView.swift +++ b/RespectU/Sources/Views/RecordView.swift @@ -269,11 +269,6 @@ final class RecordView: UIView { maximumLabel.text = "\(songButtonKeyPath.maximum)" } } -} - -// MARK: - Private Method - -private extension RecordView { func changeButtonProperties(with recordInfo: RecordInfo, inButton button: Button) { switch button { @@ -293,6 +288,11 @@ private extension RecordView { break } } +} + +// MARK: - Private Method + +private extension RecordView { func updateSkillPointLabel(with recordInfo: RecordInfo, inButton button: Button) { let keyPath = "\(button.expansion ?? "").skillPoint" diff --git a/RespectU/Sources/Views/SearchByLevelView.swift b/RespectU/Sources/Views/SearchByLevelView.swift index 7fce60d..4443b86 100644 --- a/RespectU/Sources/Views/SearchByLevelView.swift +++ b/RespectU/Sources/Views/SearchByLevelView.swift @@ -12,7 +12,7 @@ import UIKit final class SearchByLevelView: UIView { /// The picker view. - @IBOutlet private weak var pickerView: UIPickerView! + @IBOutlet weak var pickerView: UIPickerView! override func awakeFromNib() { super.awakeFromNib() diff --git a/RespectU/Sources/Views/SearchByNoteView.swift b/RespectU/Sources/Views/SearchByNoteView.swift index d14b508..a0bc99b 100644 --- a/RespectU/Sources/Views/SearchByNoteView.swift +++ b/RespectU/Sources/Views/SearchByNoteView.swift @@ -22,10 +22,10 @@ final class SearchByNoteView: UIView { weak var delegate: SearchByNoteViewDelegate? /// The no max combo button. - @IBOutlet private weak var noMaxComboButton: UIButton! + @IBOutlet weak var noMaxComboButton: UIButton! /// The perfect play button. - @IBOutlet private weak var perfectPlayButton: UIButton! + @IBOutlet weak var perfectPlayButton: UIButton! override func awakeFromNib() { super.awakeFromNib() diff --git a/RespectU/Sources/Views/SearchByRatingView.swift b/RespectU/Sources/Views/SearchByRatingView.swift index 29ab393..413ec7b 100644 --- a/RespectU/Sources/Views/SearchByRatingView.swift +++ b/RespectU/Sources/Views/SearchByRatingView.swift @@ -12,7 +12,9 @@ import UIKit protocol SearchByRatingViewDelegate: class { /// Tells the delegate that the done button is tapped. - func searchByRatingView(_ view: SearchByRatingView, didTapDoneButton button: UIButton) + func searchByRatingView(_ view: SearchByRatingView, + didTapDoneButton button: UIButton, + with textFields: [UITextField]) } /// The search by rating view. @@ -22,10 +24,10 @@ final class SearchByRatingView: UIView { weak var delegate: SearchByRatingViewDelegate? /// The text field that takes lower rating. - @IBOutlet private weak var lowerRatingTextField: UITextField! + @IBOutlet weak var lowerRatingTextField: UITextField! /// The text field that takes upper rating. - @IBOutlet private weak var upperRatingTextField: UITextField! + @IBOutlet weak var upperRatingTextField: UITextField! /// The all text fields. private var textFields: [UITextField] { @@ -53,7 +55,7 @@ final class SearchByRatingView: UIView { /// Tells the `sender` that the done button is tapped. @objc private func doneButtonDidTap(_ sender: UIButton) { - delegate?.searchByRatingView(self, didTapDoneButton: sender) + delegate?.searchByRatingView(self, didTapDoneButton: sender, with: textFields) } /// Creates the tool bar. @@ -62,7 +64,9 @@ final class SearchByRatingView: UIView { private func makeToolBar() -> UIToolbar { let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) - let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonDidTap(_:))) + let doneButton = UIBarButtonItem(barButtonSystemItem: .done, + target: self, + action: #selector(doneButtonDidTap(_:))) let toolBar = UIToolbar().then { $0.barStyle = .default $0.isTranslucent = true diff --git a/RespectU/Sources/Views/SongCell.swift b/RespectU/Sources/Views/SongCell.swift index 6c8389f..a77c1f8 100644 --- a/RespectU/Sources/Views/SongCell.swift +++ b/RespectU/Sources/Views/SongCell.swift @@ -135,8 +135,7 @@ final class SongCell: UITableViewCell { func decolorizeSubviews() { DispatchQueue.main.async { [weak self] in self?.contentView.backgroundColor = .white - self?.allLabel.forEach { $0.textColor = .black } + self?.allLabel.forEach { $0.textColor = .black50 } } } - } diff --git a/RespectU/Sources/Views/SummaryCell.swift b/RespectU/Sources/Views/SummaryCell.swift index 3135a4b..17d19c8 100644 --- a/RespectU/Sources/Views/SummaryCell.swift +++ b/RespectU/Sources/Views/SummaryCell.swift @@ -33,7 +33,7 @@ final class SummaryCell: UITableViewCell { @IBOutlet private weak var view: UIView! /// The collection view. - @IBOutlet private weak var collectionView: UICollectionView! + @IBOutlet weak var collectionView: UICollectionView! /// The detail button. @IBOutlet private weak var detailButton: UIButton!