diff --git a/Numu Tracker.xcodeproj/project.pbxproj b/Numu Tracker.xcodeproj/project.pbxproj index f025294..45c9385 100644 --- a/Numu Tracker.xcodeproj/project.pbxproj +++ b/Numu Tracker.xcodeproj/project.pbxproj @@ -8,6 +8,10 @@ /* Begin PBXBuildFile section */ 4401CBB8215DC8D000B0EB23 /* AlbumArtCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4401CBB7215DC8D000B0EB23 /* AlbumArtCache.swift */; }; + 4403C1FB22A0597E003A09B0 /* SearchDeezerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4403C1FA22A0597E003A09B0 /* SearchDeezerViewCell.swift */; }; + 4403C1FD22A05991003A09B0 /* SearchDeezerTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4403C1FC22A05991003A09B0 /* SearchDeezerTableViewCell.xib */; }; + 4403C1FF22A05F0C003A09B0 /* SearchAmazonTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4403C1FE22A05F0C003A09B0 /* SearchAmazonTableViewCell.xib */; }; + 4403C20122A05F1C003A09B0 /* SearchAmazonViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4403C20022A05F1C003A09B0 /* SearchAmazonViewCell.swift */; }; 4406A0032173A674002900E8 /* ImportSpotifyOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4406A0022173A674002900E8 /* ImportSpotifyOperation.swift */; }; 4406A00821744F38002900E8 /* ListenAMTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4406A00621744F38002900E8 /* ListenAMTableViewCell.swift */; }; 4406A00921744F38002900E8 /* ListenAMTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4406A00721744F38002900E8 /* ListenAMTableViewCell.xib */; }; @@ -66,6 +70,8 @@ B4CCFCC51DB4311B00D2277B /* ImportAppleMusicViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CCFCC41DB4311B00D2277B /* ImportAppleMusicViewController.swift */; }; B4CCFCC71DB4353E00D2277B /* NumuUIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CCFCC61DB4353E00D2277B /* NumuUIButton.swift */; }; B4CCFCC91DB447B200D2277B /* HelpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CCFCC81DB447B200D2277B /* HelpViewController.swift */; }; + B4D5960922B23D46006B4439 /* ArtistsSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D5960822B23D46006B4439 /* ArtistsSplitViewController.swift */; }; + B4D5960B22B41F2F006B4439 /* MoreTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D5960A22B41F2F006B4439 /* MoreTableViewController.swift */; }; B4F1E3AB2058C6C100F2544A /* NumuReviewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4F1E3AA2058C6C100F2544A /* NumuReviewHelper.swift */; }; E4EB5ACCF23F58468A5C04FF /* Pods_Numu_Tracker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBD0F3687066D64A7B28C145 /* Pods_Numu_Tracker.framework */; }; /* End PBXBuildFile section */ @@ -73,6 +79,10 @@ /* Begin PBXFileReference section */ 01361C8695313B7121751750 /* Pods-Numu Tracker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Numu Tracker.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Numu Tracker/Pods-Numu Tracker.debug.xcconfig"; sourceTree = ""; }; 4401CBB7215DC8D000B0EB23 /* AlbumArtCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlbumArtCache.swift; sourceTree = ""; }; + 4403C1FA22A0597E003A09B0 /* SearchDeezerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchDeezerViewCell.swift; sourceTree = ""; }; + 4403C1FC22A05991003A09B0 /* SearchDeezerTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchDeezerTableViewCell.xib; sourceTree = ""; }; + 4403C1FE22A05F0C003A09B0 /* SearchAmazonTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchAmazonTableViewCell.xib; sourceTree = ""; }; + 4403C20022A05F1C003A09B0 /* SearchAmazonViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchAmazonViewCell.swift; sourceTree = ""; }; 4406A0022173A674002900E8 /* ImportSpotifyOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportSpotifyOperation.swift; sourceTree = ""; }; 4406A00621744F38002900E8 /* ListenAMTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListenAMTableViewCell.swift; sourceTree = ""; }; 4406A00721744F38002900E8 /* ListenAMTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ListenAMTableViewCell.xib; sourceTree = ""; }; @@ -135,6 +145,8 @@ B4CCFCC41DB4311B00D2277B /* ImportAppleMusicViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportAppleMusicViewController.swift; sourceTree = ""; }; B4CCFCC61DB4353E00D2277B /* NumuUIButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumuUIButton.swift; sourceTree = ""; }; B4CCFCC81DB447B200D2277B /* HelpViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelpViewController.swift; sourceTree = ""; }; + B4D5960822B23D46006B4439 /* ArtistsSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArtistsSplitViewController.swift; sourceTree = ""; }; + B4D5960A22B41F2F006B4439 /* MoreTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreTableViewController.swift; sourceTree = ""; }; B4F1E3AA2058C6C100F2544A /* NumuReviewHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumuReviewHelper.swift; sourceTree = ""; }; CBD0F3687066D64A7B28C145 /* Pods_Numu_Tracker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Numu_Tracker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -174,7 +186,6 @@ 441CC0A7215C516E009F4114 /* Classes */ = { isa = PBXGroup; children = ( - 441CC0A9215C522E009F4114 /* Interface */, B42866071DA5FC53000E5FA6 /* User.swift */, B440D9D61DB2D19300477938 /* ArtistItem.swift */, B4283ABC1D8658AD00467CE6 /* ReleaseItem.swift */, @@ -193,18 +204,12 @@ B4CCFCBD1DB4258C00D2277B /* Artists */, B4CCFCC01DB425D900D2277B /* More */, 447FED38217811810084530E /* Modals */, - ); - path = Views; - sourceTree = ""; - }; - 441CC0A9215C522E009F4114 /* Interface */ = { - isa = PBXGroup; - children = ( + B4D5960822B23D46006B4439 /* ArtistsSplitViewController.swift */, B4CCFCC61DB4353E00D2277B /* NumuUIButton.swift */, B471648C1F5FA24600D4E03E /* NumuTextField.swift */, B40E35911DB1D88C004BA8C7 /* NumuTabBarController.swift */, ); - path = Interface; + path = Views; sourceTree = ""; }; 443EBB91217054800071A11D /* Release Details */ = { @@ -271,6 +276,10 @@ 447FED40217BA34A0084530E /* SearchSoundCloudTableViewCell.xib */, 447FED43217BB68D0084530E /* SearchYouTubeTableViewCell.swift */, 447FED44217BB68D0084530E /* SearchYouTubeTableViewCell.xib */, + 4403C1FC22A05991003A09B0 /* SearchDeezerTableViewCell.xib */, + 4403C1FA22A0597E003A09B0 /* SearchDeezerViewCell.swift */, + 4403C20022A05F1C003A09B0 /* SearchAmazonViewCell.swift */, + 4403C1FE22A05F0C003A09B0 /* SearchAmazonTableViewCell.xib */, 447FED47217BC17C0084530E /* NumuModalButton.swift */, ); path = Rows; @@ -359,6 +368,7 @@ B46754571F6DA66F00C80544 /* InstructionsViewController.swift */, B43E36B11F5DFAD0009834C9 /* LogRegPromptViewController.swift */, 447FED3D217B839F0084530E /* MusicServicesViewController.swift */, + B4D5960A22B41F2F006B4439 /* MoreTableViewController.swift */, ); name = More; path = settings; @@ -429,13 +439,13 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0930; + LastUpgradeCheck = 1020; ORGANIZATIONNAME = "Numu Tracker"; TargetAttributes = { B4283A801D8548F300467CE6 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = 2Y9M69QJKZ; - LastSwiftMigration = 1000; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.BackgroundModes = { @@ -456,7 +466,7 @@ }; buildConfigurationList = B4283A7C1D8548F300467CE6 /* Build configuration list for PBXProject "Numu Tracker" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -482,10 +492,12 @@ 443EBB902170547A0071A11D /* ReleaseDetailsViewController.xib in Resources */, 4459C3D821658A7900EB4048 /* NumuAlertView.xib in Resources */, 443EBB8C217053530071A11D /* LoginSpotifyViewController.xib in Resources */, + 4403C1FF22A05F0C003A09B0 /* SearchAmazonTableViewCell.xib in Resources */, B4283A911D8548F300467CE6 /* LaunchScreen.storyboard in Resources */, 449F5A7C2176B99900B9C919 /* MoreReleasesTableViewCell.xib in Resources */, 447FED3721780B410084530E /* ListenSpotifyTableViewCell.xib in Resources */, B4283A8E1D8548F300467CE6 /* Assets.xcassets in Resources */, + 4403C1FD22A05991003A09B0 /* SearchDeezerTableViewCell.xib in Resources */, 447FED46217BB68D0084530E /* SearchYouTubeTableViewCell.xib in Resources */, 4406A00921744F38002900E8 /* ListenAMTableViewCell.xib in Resources */, B4283A8C1D8548F300467CE6 /* Main.storyboard in Resources */, @@ -621,6 +633,7 @@ 446DBDE8215AF82400AE2AA7 /* ImportAppleMusicOperation.swift in Sources */, 4461CB8D21589D7A001939F0 /* AuthOperation.swift in Sources */, 443EBB8821702D430071A11D /* ImportSpotifyViewController.swift in Sources */, + 4403C20122A05F1C003A09B0 /* SearchAmazonViewCell.swift in Sources */, 447FED48217BC17C0084530E /* NumuModalButton.swift in Sources */, B4283ABD1D8658AD00467CE6 /* ReleaseItem.swift in Sources */, B4CCFCC91DB447B200D2277B /* HelpViewController.swift in Sources */, @@ -628,6 +641,7 @@ B46754581F6DA66F00C80544 /* InstructionsViewController.swift in Sources */, 4461CB7F21585488001939F0 /* NumuAPI.swift in Sources */, 448C68EB21CB092B00ECEC61 /* AlertModal.swift in Sources */, + B4D5960922B23D46006B4439 /* ArtistsSplitViewController.swift in Sources */, B4B940AE1E6131B800F52027 /* NotificationsViewController.swift in Sources */, 447FED3E217B839F0084530E /* MusicServicesViewController.swift in Sources */, B4283A851D8548F300467CE6 /* AppDelegate.swift in Sources */, @@ -636,6 +650,7 @@ B4CCFCC51DB4311B00D2277B /* ImportAppleMusicViewController.swift in Sources */, 4461CB8B21589AB4001939F0 /* RegisterWithCKOperation.swift in Sources */, 4401CBB8215DC8D000B0EB23 /* AlbumArtCache.swift in Sources */, + B4D5960B22B41F2F006B4439 /* MoreTableViewController.swift in Sources */, 4459C3D721658A7900EB4048 /* NumuAlertView.swift in Sources */, B440D9D71DB2D19300477938 /* ArtistItem.swift in Sources */, 447FED41217BA34A0084530E /* SearchSoundCloudTableViewCell.swift in Sources */, @@ -650,6 +665,7 @@ B45A134120551C46001EBDA5 /* Extensions.swift in Sources */, B42866081DA5FC53000E5FA6 /* User.swift in Sources */, 4461CB79215844C9001939F0 /* AsyncOperation.swift in Sources */, + 4403C1FB22A0597E003A09B0 /* SearchDeezerViewCell.swift in Sources */, 443EBB8F2170547A0071A11D /* ReleaseDetailsViewController.swift in Sources */, 44D3917021691D5000CFB9A3 /* NumuSortView.swift in Sources */, 447FED3621780B410084530E /* ListenSpotifyTableViewCell.swift in Sources */, @@ -689,6 +705,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -748,6 +765,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -816,7 +834,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -839,7 +857,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.numutracker.Numu-Tracker"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git a/Numu Tracker.xcodeproj/xcshareddata/xcschemes/Numu Tracker.xcscheme b/Numu Tracker.xcodeproj/xcshareddata/xcschemes/Numu Tracker.xcscheme index f9d6c13..7e68cb4 100644 --- a/Numu Tracker.xcodeproj/xcshareddata/xcschemes/Numu Tracker.xcscheme +++ b/Numu Tracker.xcodeproj/xcshareddata/xcschemes/Numu Tracker.xcscheme @@ -1,6 +1,6 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.3.3 + 1.3.4 CFBundleURLTypes @@ -32,7 +32,7 @@ CFBundleVersion - 951 + 1109 Fabric APIKey @@ -85,6 +85,14 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance diff --git a/Numu Tracker/Views/ArtistsSplitViewController.swift b/Numu Tracker/Views/ArtistsSplitViewController.swift new file mode 100644 index 0000000..d4ec531 --- /dev/null +++ b/Numu Tracker/Views/ArtistsSplitViewController.swift @@ -0,0 +1,24 @@ +// +// ArtistsSplitViewController.swift +// Numu Tracker +// +// Created by Bradley Root on 6/13/19. +// Copyright © 2019 Numu Tracker. All rights reserved. +// + +import UIKit + +class ArtistsSplitViewController: UISplitViewController, UISplitViewControllerDelegate { + + override func viewDidLoad() { + super.viewDidLoad() + self.preferredDisplayMode = .allVisible + self.view.backgroundColor = UIColor(white: 0.1, alpha: 1) + self.delegate = self + } + + func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool { + return true + } + +} diff --git a/Numu Tracker/Views/Base.lproj/Main.storyboard b/Numu Tracker/Views/Base.lproj/Main.storyboard index 1c9ea25..81818df 100644 --- a/Numu Tracker/Views/Base.lproj/Main.storyboard +++ b/Numu Tracker/Views/Base.lproj/Main.storyboard @@ -1,11 +1,11 @@ - - + + - + @@ -18,11 +18,14 @@ - + @@ -55,8 +58,8 @@ Any imported artists you've unfollowed will not be re-imported. - - + + @@ -66,7 +69,7 @@ Any imported artists you've unfollowed will not be re-imported. - + @@ -76,12 +79,12 @@ Any imported artists you've unfollowed will not be re-imported. - - + + - + @@ -273,9 +276,9 @@ Any imported artists you've unfollowed will not be re-imported. @@ -413,7 +416,7 @@ Any imported artists you've unfollowed will not be re-imported. - + @@ -423,12 +426,12 @@ Any imported artists you've unfollowed will not be re-imported. - - + + - + - + @@ -448,34 +451,34 @@ Any imported artists you've unfollowed will not be re-imported. - + - + - + - + @@ -485,41 +488,39 @@ Any imported artists you've unfollowed will not be re-imported. - - + @@ -1869,7 +2005,7 @@ You can import artists from Apple Music, Spotify, or manually search and follow - + @@ -1882,7 +2018,7 @@ You can import artists from Apple Music, Spotify, or manually search and follow - + @@ -1894,16 +2030,64 @@ You can import artists from Apple Music, Spotify, or manually search and follow - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2036,27 +2245,7 @@ Any imported artists you've unfollowed will not be re-imported. - - - - - - - - - - - - - - - - - - - - - + @@ -2065,7 +2254,7 @@ Any imported artists you've unfollowed will not be re-imported. - + @@ -2076,7 +2265,7 @@ Any imported artists you've unfollowed will not be re-imported. - + @@ -2085,7 +2274,7 @@ Any imported artists you've unfollowed will not be re-imported. - + @@ -2097,7 +2286,7 @@ Any imported artists you've unfollowed will not be re-imported. - + @@ -2107,35 +2296,38 @@ Any imported artists you've unfollowed will not be re-imported. - - + + - + - - + + - + - - + + - - - + + + - + @@ -2374,11 +2567,11 @@ On the - + - + - + - + - + - + - - + + - + - I'm @amiantos on Twitter. Feel free to @ me with ideas, problems, or just to chat. Follow me to get updates on Numu and what I'm up to. @@ -2447,24 +2639,24 @@ On the - + - + - + - - + + - + @@ -2486,7 +2678,39 @@ On the - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2496,15 +2720,15 @@ On the - - + + - + - + - + - + - + - - + - + @@ -2722,7 +2948,7 @@ On the - + @@ -2730,7 +2956,7 @@ On the - + @@ -2741,7 +2967,27 @@ On the - + + + + + + + + + + + + + + + + + + + + + @@ -2750,5 +2996,8 @@ On the + + + diff --git a/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.swift b/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.swift index 1cebf62..471ee0a 100644 --- a/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.swift +++ b/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.swift @@ -45,6 +45,12 @@ class ReleaseDetailsViewController: UIViewController, UITableViewDataSource { self.releaseOptionsTableView.register( UINib(nibName: "SearchYouTubeTableViewCell", bundle: nil), forCellReuseIdentifier: "searchYouTubeCell") + self.releaseOptionsTableView.register( + UINib(nibName: "SearchDeezerTableViewCell", bundle: nil), + forCellReuseIdentifier: "searchDeezerCell") + self.releaseOptionsTableView.register( + UINib(nibName: "SearchAmazonTableViewCell", bundle: nil), + forCellReuseIdentifier: "searchAmazonCell") self.releaseOptionsTableView.dataSource = self let tap = UITapGestureRecognizer(target: self, action: #selector(ReleaseDetailsViewController.dismissView)) self.tapRecognizerView.addGestureRecognizer(tap) @@ -97,6 +103,14 @@ class ReleaseDetailsViewController: UIViewController, UITableViewDataSource { self.options.append("youtube") } + if defaults.enabledDeezer { + self.options.append("deezer") + } + + if defaults.enabledAmazon { + self.options.append("amazon") + } + if let tabBar = self.presentingViewController as? UITabBarController, let window = tabBar.selectedViewController as? UINavigationController, let viewController = window.visibleViewController { @@ -207,6 +221,20 @@ class ReleaseDetailsViewController: UIViewController, UITableViewDataSource { cell.configure(release: self.releaseData!) return cell } + case "deezer": + if let cell = tableView.dequeueReusableCell( + withIdentifier: "searchDeezerCell", + for: indexPath) as? SearchDeezerTableViewCell { + cell.configure(release: self.releaseData!) + return cell + } + case "amazon": + if let cell = tableView.dequeueReusableCell( + withIdentifier: "searchAmazonCell", + for: indexPath) as? SearchAmazonTableViewCell { + cell.configure(release: self.releaseData!) + return cell + } default: break } diff --git a/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.xib b/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.xib index 826b8ec..55c0733 100644 --- a/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.xib +++ b/Numu Tracker/Views/Modals/Release Details/ReleaseDetailsViewController.xib @@ -1,11 +1,11 @@ - - + + - + @@ -26,22 +26,22 @@ - + - + - + - + - + @@ -51,10 +51,10 @@ - + - + @@ -62,13 +62,13 @@ diff --git a/Numu Tracker/Views/Modals/Release Details/Rows/SearchAmazonTableViewCell.xib b/Numu Tracker/Views/Modals/Release Details/Rows/SearchAmazonTableViewCell.xib new file mode 100644 index 0000000..c7c1ae7 --- /dev/null +++ b/Numu Tracker/Views/Modals/Release Details/Rows/SearchAmazonTableViewCell.xib @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Numu Tracker/Views/Modals/Release Details/Rows/SearchAmazonViewCell.swift b/Numu Tracker/Views/Modals/Release Details/Rows/SearchAmazonViewCell.swift new file mode 100644 index 0000000..e452f8d --- /dev/null +++ b/Numu Tracker/Views/Modals/Release Details/Rows/SearchAmazonViewCell.swift @@ -0,0 +1,63 @@ +// +// SearchYouTubeTableViewCell.swift +// Numu Tracker +// +// Created by Brad Root on 10/20/18. +// Copyright © 2018 Numu Tracker. All rights reserved. +// + +import UIKit + +class SearchAmazonTableViewCell: UITableViewCell { + + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var cellImage: UIImageView! + @IBOutlet weak var cellButton: NumuModalButton! + + @IBAction func searchAmazon(_ sender: Any) { + if let urlString = self.searchUrl { + UIApplication.shared.open(URL(string: urlString)!) + } + } + + var releaseData: ReleaseItem? + var searchUrl: String? + + func configure(release: ReleaseItem) { + self.releaseData = release + self.cellButton.isEnabled = false + self.cellLabel.textColor = UIColor.init(white: 1, alpha: 0.1) + self.cellImage.image = self.cellImage.image?.withRenderingMode(.alwaysTemplate) + self.cellImage.tintColor = UIColor.init(white: 1, alpha: 0.1) + self.makeSearchURL() + } + + func makeSearchURL() { + if let artist = self.releaseData?.artistName, + let album = self.releaseData?.albumName { + if let query = "\(artist) \(album)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { + // I would love to properly link to Amazon Music's iOS app here + // But unfortunately their app just doesn't support deep links to the search page. + // So instead we try to link to search in the Amazon app, which still + // doesn't properly redirect to the Amazon Music app. It really sucks. + self.searchUrl = "https://www.amazon.com/s?k=\(query)&i=digital-music" +// self.searchUrl = "amznmp3://search?k=\(query)" + self.cellButton.isEnabled = true + self.cellLabel.textColor = .white + self.cellImage.tintColor = .white + } + } + } + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/Numu Tracker/Views/Modals/Release Details/Rows/SearchDeezerTableViewCell.xib b/Numu Tracker/Views/Modals/Release Details/Rows/SearchDeezerTableViewCell.xib new file mode 100644 index 0000000..2dc5692 --- /dev/null +++ b/Numu Tracker/Views/Modals/Release Details/Rows/SearchDeezerTableViewCell.xib @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Numu Tracker/Views/Modals/Release Details/Rows/SearchDeezerViewCell.swift b/Numu Tracker/Views/Modals/Release Details/Rows/SearchDeezerViewCell.swift new file mode 100644 index 0000000..d45b38e --- /dev/null +++ b/Numu Tracker/Views/Modals/Release Details/Rows/SearchDeezerViewCell.swift @@ -0,0 +1,58 @@ +// +// SearchYouTubeTableViewCell.swift +// Numu Tracker +// +// Created by Brad Root on 10/20/18. +// Copyright © 2018 Numu Tracker. All rights reserved. +// + +import UIKit + +class SearchDeezerTableViewCell: UITableViewCell { + + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var cellImage: UIImageView! + @IBOutlet weak var cellButton: NumuModalButton! + + @IBAction func searchDeezer(_ sender: Any) { + if let urlString = self.searchUrl { + UIApplication.shared.open(URL(string: urlString)!) + } + } + + var releaseData: ReleaseItem? + var searchUrl: String? + + func configure(release: ReleaseItem) { + self.releaseData = release + self.cellButton.isEnabled = false + self.cellLabel.textColor = UIColor.init(white: 1, alpha: 0.1) + self.cellImage.image = self.cellImage.image?.withRenderingMode(.alwaysTemplate) + self.cellImage.tintColor = UIColor.init(white: 1, alpha: 0.1) + self.makeSearchURL() + } + + func makeSearchURL() { + if let artist = self.releaseData?.artistName, + let album = self.releaseData?.albumName { + if let query = "\(artist) \(album)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { + self.searchUrl = "deezer://www.deezer.com/search/\(query)" + self.cellButton.isEnabled = true + self.cellLabel.textColor = .white + self.cellImage.tintColor = .white + } + } + } + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/Numu Tracker/Views/Modals/Sort/NumuSortView.xib b/Numu Tracker/Views/Modals/Sort/NumuSortView.xib index 195642f..c4ee2ab 100644 --- a/Numu Tracker/Views/Modals/Sort/NumuSortView.xib +++ b/Numu Tracker/Views/Modals/Sort/NumuSortView.xib @@ -1,11 +1,11 @@ - - + + - + @@ -19,14 +19,14 @@ - + - + - + + + - - + + - + + + + - + - - + + - + + @@ -150,12 +158,15 @@ + - - + + + - - + + + diff --git a/Numu Tracker/Classes/Interface/NumuTabBarController.swift b/Numu Tracker/Views/NumuTabBarController.swift similarity index 100% rename from Numu Tracker/Classes/Interface/NumuTabBarController.swift rename to Numu Tracker/Views/NumuTabBarController.swift diff --git a/Numu Tracker/Classes/Interface/NumuTextField.swift b/Numu Tracker/Views/NumuTextField.swift similarity index 100% rename from Numu Tracker/Classes/Interface/NumuTextField.swift rename to Numu Tracker/Views/NumuTextField.swift diff --git a/Numu Tracker/Views/NumuUIButton.swift b/Numu Tracker/Views/NumuUIButton.swift new file mode 100644 index 0000000..9c7920e --- /dev/null +++ b/Numu Tracker/Views/NumuUIButton.swift @@ -0,0 +1,37 @@ +// +// NumuUIButton.swift +// Numu Tracker +// +// Created by Bradley Root on 10/16/16. +// Copyright © 2016 Numu Tracker. All rights reserved. +// + +import UIKit + +class NumuUIButton: UIButton { + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setup() + } + + override var isHighlighted: Bool { + didSet { + self.backgroundColor = isHighlighted ? .selectedCell : .numuBlue + } + } + + func setup() { + self.layer.cornerRadius = self.frame.size.height/2 + self.clipsToBounds = true + self.backgroundColor = .numuBlue + self.titleLabel?.font = UIFont.boldSystemFont(ofSize: 15) + self.contentEdgeInsets = UIEdgeInsets(top: 0, left: 32, bottom: 0, right: 32) + } + +} diff --git a/Numu Tracker/Views/artistreleases/ArtistReleaseTableViewCell.swift b/Numu Tracker/Views/artistreleases/ArtistReleaseTableViewCell.swift index 05401cc..850a85e 100644 --- a/Numu Tracker/Views/artistreleases/ArtistReleaseTableViewCell.swift +++ b/Numu Tracker/Views/artistreleases/ArtistReleaseTableViewCell.swift @@ -49,7 +49,7 @@ class ArtistReleaseTableViewCell: UITableViewCell { self.selectionStyle = .default let bgColorView = UIView() - bgColorView.backgroundColor = UIColor(red: 0.17, green: 0.17, blue: 0.17, alpha: 1.0) + bgColorView.backgroundColor = .selectedCell self.selectedBackgroundView = bgColorView } diff --git a/Numu Tracker/Views/artistreleases/ArtistReleasesTableViewController.swift b/Numu Tracker/Views/artistreleases/ArtistReleasesTableViewController.swift index 463c30d..d55bec9 100644 --- a/Numu Tracker/Views/artistreleases/ArtistReleasesTableViewController.swift +++ b/Numu Tracker/Views/artistreleases/ArtistReleasesTableViewController.swift @@ -19,6 +19,7 @@ class ArtistReleasesTableViewController: UITableViewController { @IBOutlet var footerView: UIView! @IBOutlet var noResultsView: UIView! + @IBOutlet var selectAnArtistView: UIView! override func viewDidLoad() { super.viewDidLoad() @@ -27,9 +28,13 @@ class ArtistReleasesTableViewController: UITableViewController { navigationItem.rightBarButtonItem = add + navigationItem.leftBarButtonItem = + splitViewController?.displayModeButtonItem + navigationItem.leftItemsSupplementBackButton = true + self.navigationController?.navigationBar.tintColor = .white + if let artistId = self.artistId { - self.navigationController?.navigationBar.tintColor = .white let selectedArtist: String = artistId self.title = artistName self.tableView.tableFooterView = footerView @@ -56,6 +61,8 @@ class ArtistReleasesTableViewController: UITableViewController { } } Answers.logCustomEvent(withName: "Artist Screen", customAttributes: ["Artist ID": selectedArtist]) + } else { + self.tableView.tableFooterView = self.selectAnArtistView } } diff --git a/Numu Tracker/Views/artists/ArtistTableViewCell.swift b/Numu Tracker/Views/artists/ArtistTableViewCell.swift index 8327a4f..c657dcf 100644 --- a/Numu Tracker/Views/artists/ArtistTableViewCell.swift +++ b/Numu Tracker/Views/artists/ArtistTableViewCell.swift @@ -47,6 +47,11 @@ class ArtistTableViewCell: UITableViewCell { artistArt.layer.shadowOpacity = 0.3 artistArt.layer.shadowOffset = .zero artistArt.layer.shadowRadius = 5 + + self.selectionStyle = .default + let bgColorView = UIView() + bgColorView.backgroundColor = .selectedCell + self.selectedBackgroundView = bgColorView } public func toggleFollow() { diff --git a/Numu Tracker/Views/artists/ArtistsTableViewController.swift b/Numu Tracker/Views/artists/ArtistsTableViewController.swift index 6580d2c..d2f0885 100644 --- a/Numu Tracker/Views/artists/ArtistsTableViewController.swift +++ b/Numu Tracker/Views/artists/ArtistsTableViewController.swift @@ -183,6 +183,7 @@ class ArtistsTableViewController: UITableViewController, UISearchBarDelegate, UI override func viewDidLoad() { super.viewDidLoad() + title = "Artists" tableView.tableFooterView = footerView tableView.backgroundView = UIView() tableView.keyboardDismissMode = .onDrag @@ -205,16 +206,6 @@ class ArtistsTableViewController: UITableViewController, UISearchBarDelegate, UI self.view?.snapshotView(afterScreenUpdates: true) - importAppleMusicButton.backgroundColor = .clear - importAppleMusicButton.layer.cornerRadius = 5 - importAppleMusicButton.layer.borderWidth = 1 - importAppleMusicButton.layer.borderColor = UIColor.gray.cgColor - - importSpotifyButton.backgroundColor = .clear - importSpotifyButton.layer.cornerRadius = 5 - importSpotifyButton.layer.borderWidth = 1 - importSpotifyButton.layer.borderColor = UIColor.gray.cgColor - var newFrame = noResultsView.frame var height: CGFloat = self.tableView.bounds.height height -= UIApplication.shared.statusBarFrame.size.height @@ -450,9 +441,10 @@ class ArtistsTableViewController: UITableViewController, UISearchBarDelegate, UI override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showArtistReleases", - let destination = segue.destination as? ArtistReleasesTableViewController, + let destination = segue.destination as? UINavigationController, let releaseIndex = tableView.indexPathForSelectedRow?.row, let sectionIndex = tableView.indexPathForSelectedRow?.section { + self.searchTerms = searchController.searchBar.text var artistId = artists[releaseIndex].artistId @@ -467,8 +459,10 @@ class ArtistsTableViewController: UITableViewController, UISearchBarDelegate, UI self.lastSelectedArtistId = artistId self.lastSelectedArtistName = artistName - destination.artistId = artistId - destination.artistName = artistName + if let artistView = destination.topViewController as? ArtistReleasesTableViewController { + artistView.artistId = artistId + artistView.artistName = artistName + } } } } diff --git a/Numu Tracker/Views/releases/AllReleasesTableViewController.swift b/Numu Tracker/Views/releases/AllReleasesTableViewController.swift index a7ed752..938eaab 100644 --- a/Numu Tracker/Views/releases/AllReleasesTableViewController.swift +++ b/Numu Tracker/Views/releases/AllReleasesTableViewController.swift @@ -175,16 +175,6 @@ class AllReleasesTableViewController: UITableViewController { self.tableView.tableFooterView = self.footerView - importFromAMButton.backgroundColor = .clear - importFromAMButton.layer.cornerRadius = 5 - importFromAMButton.layer.borderWidth = 1 - importFromAMButton.layer.borderColor = UIColor.gray.cgColor - - importSpotifyButton.backgroundColor = .clear - importSpotifyButton.layer.cornerRadius = 5 - importSpotifyButton.layer.borderWidth = 1 - importSpotifyButton.layer.borderColor = UIColor.gray.cgColor - var newFrame = noResultsFooterView.frame var height: CGFloat = self.tableView.bounds.height height -= UIApplication.shared.statusBarFrame.size.height diff --git a/Numu Tracker/Views/releases/ReleaseTableViewCell.swift b/Numu Tracker/Views/releases/ReleaseTableViewCell.swift index 3df033a..2fb495b 100644 --- a/Numu Tracker/Views/releases/ReleaseTableViewCell.swift +++ b/Numu Tracker/Views/releases/ReleaseTableViewCell.swift @@ -58,7 +58,7 @@ class ReleaseTableViewCell: UITableViewCell { self.selectionStyle = .default let bgColorView = UIView() - bgColorView.backgroundColor = UIColor(red: 0.17, green: 0.17, blue: 0.17, alpha: 1.0) + bgColorView.backgroundColor = .selectedCell self.selectedBackgroundView = bgColorView } diff --git a/Numu Tracker/Views/settings/HelpViewController.swift b/Numu Tracker/Views/settings/HelpViewController.swift index 249e3da..fb3b965 100644 --- a/Numu Tracker/Views/settings/HelpViewController.swift +++ b/Numu Tracker/Views/settings/HelpViewController.swift @@ -45,7 +45,7 @@ class HelpViewController: UIViewController, MFMailComposeViewControllerDelegate mail.setMessageBody("

Numu feedback goes here:

", isHTML: true) present(mail, animated: true, completion: nil) } else { - // show failure alert + UIApplication.shared.openURL(URL(string: "mailto:info@numutracker.com")!) } } @@ -55,23 +55,11 @@ class HelpViewController: UIViewController, MFMailComposeViewControllerDelegate error: Error?) { controller.dismiss(animated: true, completion: nil) } - - func setupButton(button: NumuUIButton) { - button.backgroundColor = .clear - button.layer.cornerRadius = 5 - button.layer.borderWidth = 1 - button.layer.borderColor = UIColor.gray.cgColor - } - override func viewDidLoad() { super.viewDidLoad() self.navigationController?.navigationBar.tintColor = .white - setupButton(button: emailDeveloperButton) - setupButton(button: discussOnRedditButtonOutlet) - setupButton(button: joinSlackButton) - Answers.logCustomEvent(withName: "Help View", customAttributes: nil) } diff --git a/Numu Tracker/Views/settings/Import Artists/ImportAppleMusicViewController.swift b/Numu Tracker/Views/settings/Import Artists/ImportAppleMusicViewController.swift index 671531e..cba9086 100644 --- a/Numu Tracker/Views/settings/Import Artists/ImportAppleMusicViewController.swift +++ b/Numu Tracker/Views/settings/Import Artists/ImportAppleMusicViewController.swift @@ -33,11 +33,6 @@ class ImportAppleMusicViewController: UIViewController { self.navigationController?.navigationBar.tintColor = .white - addFromAppleMusic.backgroundColor = .clear - addFromAppleMusic.layer.cornerRadius = 5 - addFromAppleMusic.layer.borderWidth = 1 - addFromAppleMusic.layer.borderColor = UIColor.gray.cgColor - } override func didReceiveMemoryWarning() { diff --git a/Numu Tracker/Views/settings/Import Artists/ImportSpotifyViewController.swift b/Numu Tracker/Views/settings/Import Artists/ImportSpotifyViewController.swift index 73cdc64..91bd0f2 100644 --- a/Numu Tracker/Views/settings/Import Artists/ImportSpotifyViewController.swift +++ b/Numu Tracker/Views/settings/Import Artists/ImportSpotifyViewController.swift @@ -29,10 +29,6 @@ class ImportSpotifyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - spotifyButton.backgroundColor = .clear - spotifyButton.layer.cornerRadius = 5 - spotifyButton.layer.borderWidth = 1 - spotifyButton.layer.borderColor = UIColor.gray.cgColor } } diff --git a/Numu Tracker/Views/settings/MoreTableViewController.swift b/Numu Tracker/Views/settings/MoreTableViewController.swift new file mode 100644 index 0000000..b894643 --- /dev/null +++ b/Numu Tracker/Views/settings/MoreTableViewController.swift @@ -0,0 +1,42 @@ +// +// MoreTableViewController.swift +// Numu Tracker +// +// Created by Bradley Root on 6/14/19. +// Copyright © 2019 Numu Tracker. All rights reserved. +// + +import UIKit + +class MoreTableViewController: UITableViewController { + + @IBAction func patronButton(_ sender: NumuUIButton) { + UIApplication.shared.open( + URL( + string: "https://www.patreon.com/amiantos?utm_source=numu_ios&utm_medium=button&utm_campaign=more_screen" + )!, + options: [:], + completionHandler: nil + ) + } + @IBAction func visitBlogButton(_ sender: NumuUIButton) { + UIApplication.shared.open( + URL(string: "https://amiantos.net/?utm_source=numu_ios&utm_medium=button&utm_campaign=more_screen")!, + options: [:], + completionHandler: nil + ) + } + @IBAction func learnMoreButton(_ sender: NumuUIButton) { + UIApplication.shared.open( + URL(string: "https://www.github.com/numutracker/numutracker_ios")!, + options: [:], + completionHandler: nil + ) + } + + override func viewDidLoad() { + super.viewDidLoad() + + } + +} diff --git a/Numu Tracker/Views/settings/MusicServicesViewController.swift b/Numu Tracker/Views/settings/MusicServicesViewController.swift index 59490c8..64c6f54 100644 --- a/Numu Tracker/Views/settings/MusicServicesViewController.swift +++ b/Numu Tracker/Views/settings/MusicServicesViewController.swift @@ -15,6 +15,8 @@ class MusicServicesViewController: UIViewController { @IBOutlet weak var spotifySwitch: UISwitch! @IBOutlet weak var youTubeSwitch: UISwitch! @IBOutlet weak var soundCloudSwitch: UISwitch! + @IBOutlet weak var deezerSwitch: UISwitch! + @IBOutlet weak var amazonSwitch: UISwitch! @IBAction func appleMusicAction(_ sender: UISwitch) { self.serviceSwitch(state: !sender.isOn, type: "disabledAppleMusic") @@ -48,6 +50,23 @@ class MusicServicesViewController: UIViewController { } } + @IBAction func deezerAction(_ sender: UISwitch) { + self.serviceSwitch(state: sender.isOn, type: "enabledDeezer") + } + @IBAction func amazonAction(_ sender: UISwitch) { + self.serviceSwitch(state: sender.isOn, type: "enabledAmazon") + if sender.isOn { + AlertModal( + title: "Important Notice", + button: "Oh, okay", + message: "Amazon's iOS app doesn't work very well when it comes to finding streaming music, " + + "as a result this option doesn't work as well as it should. " + + "If you're upset about it, contact Amazon and tell them to enable " + + "deep-linking for search in their iOS Amazon Music app." + ).present() + } + } + override func viewDidLoad() { super.viewDidLoad() setUpSwitches() @@ -67,6 +86,8 @@ class MusicServicesViewController: UIViewController { if defaults.enabledSpotify { spotifySwitch.isOn = true } if defaults.enabledYouTube { youTubeSwitch.isOn = true } if defaults.enabledSoundCloud { soundCloudSwitch.isOn = true } + if defaults.enabledDeezer { deezerSwitch.isOn = true } + if defaults.enabledAmazon { amazonSwitch.isOn = true } } func serviceSwitch(state: Bool, type: String) { diff --git a/Numu Tracker/backend/Extensions.swift b/Numu Tracker/backend/Extensions.swift index d6bae1d..7206bad 100644 --- a/Numu Tracker/backend/Extensions.swift +++ b/Numu Tracker/backend/Extensions.swift @@ -48,6 +48,8 @@ extension String { static let enabledSpotify = "enabledSpotify" static let enabledYouTube = "enabledYouTube" static let enabledSoundCloud = "enabledSoundCloud" + static let enabledAmazon = "enabledAmazon" + static let enabledDeezer = "enabledDeezer" } extension UserDefaults { @@ -95,6 +97,16 @@ extension UserDefaults { get { return bool(forKey: .enabledSoundCloud) } set { set(newValue, forKey: .enabledSoundCloud) } } + + var enabledAmazon: Bool { + get { return bool(forKey: .enabledAmazon) } + set { set(newValue, forKey: .enabledAmazon) } + } + + var enabledDeezer: Bool { + get { return bool(forKey: .enabledDeezer) } + set { set(newValue, forKey: .enabledDeezer) } + } } extension Notification.Name { @@ -122,6 +134,8 @@ extension UIView { extension UIColor { static let shadow = UIColor(red: 28/255, green: 202/255, blue: 241/255, alpha: 1) static let background = UIColor(red: 48/255, green: 156/255, blue: 172/255, alpha: 1) + static let numuBlue = UIColor(red: 0.12, green: 0.62, blue: 0.69, alpha: 1.0) + static let selectedCell = UIColor(red: 0.17, green: 0.17, blue: 0.17, alpha: 1.0) } extension UIImageView { diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 64a9ede..b8960a3 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -2079,19 +2079,56 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0930; + LastUpgradeCheck = 1020; TargetAttributes = { + 0882708950626A3ECBCB6A065347330B = { + LastSwiftMigration = 1020; + }; + 1780C14C19D0C1935B5AC4D68FB773C0 = { + LastSwiftMigration = 1020; + }; + 3383968E74B5371B20BB519B170DC7FD = { + LastSwiftMigration = 1020; + }; + 464A7D341C2A3C9ABE8E7EF25CA59657 = { + LastSwiftMigration = 1020; + }; + 4A0A22DC77365EB37D44E9B9E0F3ABD4 = { + LastSwiftMigration = 1020; + }; + 743E4A349913BA26BF7AEE81D0D0DC34 = { + LastSwiftMigration = 1020; + }; 75252EE503C70690FEAE769E7B2BEFA0 = { - LastSwiftMigration = 1010; + LastSwiftMigration = 1020; + }; + 90DFF15BFABD5F2337D3A71747F0BE35 = { + LastSwiftMigration = 1020; + }; + AB7C08C1EB0EAF7D1F392B8C08144D51 = { + LastSwiftMigration = 1020; + }; + B8D70028BC542B2A1ECC63134BF9C8C6 = { + LastSwiftMigration = 1020; + }; + C96DAD7E39A2D336B0233A69073F19DF = { + LastSwiftMigration = 1020; + }; + DFBB750E924C65F3574C45E497FFD9AC = { + LastSwiftMigration = 1020; + }; + F954FC9297BDF88E463223E96E915841 = { + LastSwiftMigration = 1020; }; }; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; productRefGroup = 199F6B3C03B13121012979AD2AE13321 /* Products */; @@ -2777,6 +2814,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -2975,6 +3013,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";