├── Apple-Music-Search-Chips-Demo ├── Supporting Files │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ └── Base.lproj │ │ └── LaunchScreen.storyboard ├── View Controllers │ ├── TaggedSearchController.swift │ └── ViewController.swift ├── Extensions │ ├── UISearchBar+ScopeBar.swift │ ├── UISearchBar+ScopeBarContainerView.swift │ └── UISegmentedControl+SetTitles.swift ├── Base │ ├── SceneDelegate.swift │ └── AppDelegate.swift └── Views │ ├── TaggedSearchBar.swift │ └── TagsView.swift └── Apple-Music-Search-Chips-Demo.xcodeproj ├── project.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── xcuserdata └── sebvidal.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ └── xcschememanagement.plist └── project.pbxproj /Apple-Music-Search-Chips-Demo/Supporting Files/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo.xcodeproj/xcuserdata/sebvidal.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Supporting Files/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/View Controllers/TaggedSearchController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TaggedSearchController.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 07/09/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | class TaggedSearchController: UISearchController { 11 | private lazy var _searchBar = TaggedSearchBar() 12 | 13 | override var searchBar: TaggedSearchBar { 14 | return _searchBar 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Extensions/UISearchBar+ScopeBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISearchBar+ScopeBar.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 07/09/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UISearchBar { 11 | var scopeBar: UIView? { 12 | let selector = NSSelectorFromString("_scopeBar") 13 | guard responds(to: selector) else { return nil } 14 | return value(forKey: "_scopeBar") as? UIView 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo.xcodeproj/xcuserdata/sebvidal.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Apple-Music-Search-Chips-Demo.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Extensions/UISearchBar+ScopeBarContainerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISearchBar+ScopeBarContainerView.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 07/09/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UISearchBar { 11 | var scopeBarContainerView: UIView? { 12 | let selector = NSSelectorFromString("_scopeBarContainerView") 13 | guard responds(to: selector) else { return nil } 14 | return value(forKey: "_scopeBarContainerView") as? UIView 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Extensions/UISegmentedControl+SetTitles.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISegmentedControl+SetTitles.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 07/09/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UISegmentedControl { 11 | func setTitles(_ titles: [String]?) { 12 | if let titles { 13 | for title in titles.reversed() { 14 | insertSegment(withTitle: title, at: 0, animated: false) 15 | } 16 | selectedSegmentIndex = 0 17 | } else { 18 | removeAllSegments() 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIApplicationSceneManifest 6 | 7 | UIApplicationSupportsMultipleScenes 8 | 9 | UISceneConfigurations 10 | 11 | UIWindowSceneSessionRoleApplication 12 | 13 | 14 | UISceneConfigurationName 15 | Default Configuration 16 | UISceneDelegateClassName 17 | $(PRODUCT_MODULE_NAME).SceneDelegate 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Base/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 02/08/2024. 6 | // 7 | 8 | import UIKit 9 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 10 | 11 | var window: UIWindow? 12 | 13 | 14 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 15 | guard let windowScene = scene as? UIWindowScene else { return } 16 | 17 | let rootViewController = ViewController() 18 | 19 | let navigationController = UINavigationController(rootViewController: rootViewController) 20 | 21 | let window = UIWindow(windowScene: windowScene) 22 | window.rootViewController = navigationController 23 | window.tintColor = .systemPink 24 | window.makeKeyAndVisible() 25 | window.backgroundColor = .systemBackground 26 | 27 | self.window = window 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Base/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 02/08/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | @main 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | // Override point for customization after application launch. 17 | return true 18 | } 19 | 20 | // MARK: UISceneSession Lifecycle 21 | 22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 23 | // Called when a new scene session is being created. 24 | // Use this method to select a configuration to create the new scene with. 25 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 26 | } 27 | 28 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 29 | // Called when the user discards a scene session. 30 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 31 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 32 | } 33 | 34 | 35 | } 36 | 37 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/View Controllers/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Apple-Music-Search-Tags-Demo 4 | // 5 | // Created by Seb Vidal on 02/08/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | class ViewController: UITableViewController, UISearchBarDelegate { 11 | private var searchController: TaggedSearchController! 12 | private var isCancelling: Bool = false 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | 17 | searchController = TaggedSearchController() 18 | searchController.scopeBarActivation = .onSearchActivation 19 | searchController.searchBar.scopeButtonTitles = ["Apple Music", "Library"] 20 | searchController.searchBar.tagTitles = ["Top Results", "Artists", "Albums", "Songs", "Playlists", "Stations", "Profiles"] 21 | searchController.searchBar.delegate = self 22 | 23 | navigationItem.searchController = searchController 24 | navigationItem.title = "Search" 25 | } 26 | 27 | func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { 28 | isCancelling = false 29 | 30 | UIView.animate(withDuration: 0.25) { 31 | self.searchController.searchBar.showsTags = false 32 | } 33 | } 34 | 35 | func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { 36 | guard isCancelling == false else { return } 37 | 38 | UIView.animate(withDuration: 0.25) { 39 | self.searchController.searchBar.showsTags = true 40 | } 41 | } 42 | 43 | func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 44 | isCancelling = true 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Supporting Files/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Views/TaggedSearchBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TaggedSearchBar.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 07/09/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | class TaggedSearchBar: UISearchBar { 11 | private var segmentedControl: UISegmentedControl! 12 | private var tagsView: TagsView! 13 | 14 | override var scopeButtonTitles: [String]? { 15 | didSet { 16 | segmentedControl.setTitles(scopeButtonTitles) 17 | } 18 | } 19 | 20 | var showsTags: Bool = false { 21 | didSet { 22 | layoutSegmentedControl() 23 | layoutTagsView() 24 | } 25 | } 26 | 27 | var tagTitles: [String] { 28 | get { 29 | return tagsView.titles 30 | } set { 31 | tagsView.titles = newValue 32 | } 33 | } 34 | 35 | override init(frame: CGRect) { 36 | super.init(frame: frame) 37 | setupSegmentedControl() 38 | setupTagsView() 39 | } 40 | 41 | required init?(coder: NSCoder) { 42 | fatalError("init(coder:) has not been implemented") 43 | } 44 | 45 | private func setupSegmentedControl() { 46 | segmentedControl = UISegmentedControl() 47 | segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged), for: .valueChanged) 48 | } 49 | 50 | @objc private func segmentedControlValueChanged(_ sender: UISegmentedControl) { 51 | delegate?.searchBar?(self, selectedScopeButtonIndexDidChange: sender.selectedSegmentIndex) 52 | } 53 | 54 | private func setupTagsView() { 55 | tagsView = TagsView() 56 | tagsView.alpha = 0 57 | } 58 | 59 | private func layoutSegmentedControl() { 60 | if let scopeBar { 61 | segmentedControl.frame.size = scopeBar.frame.size 62 | segmentedControl.frame.origin.x = scopeBar.frame.origin.x 63 | segmentedControl.frame.origin.y = showsTags ? -scopeBar.frame.height : scopeBar.frame.origin.y 64 | 65 | segmentedControl.alpha = showsTags ? 0 : 1 66 | } 67 | } 68 | 69 | private func layoutTagsView() { 70 | if let scopeBarContainerView { 71 | tagsView.frame.size = scopeBarContainerView.frame.size 72 | tagsView.frame.origin.x = 0 73 | tagsView.frame.origin.y = showsTags ? 0 : scopeBarContainerView.frame.height 74 | 75 | tagsView.alpha = showsTags ? 1 : 0 76 | 77 | let contentInset = searchTextField.frame.origin.x 78 | let safeAreaInset = safeAreaInsets.left 79 | tagsView.contentInset.left = contentInset - safeAreaInset 80 | tagsView.contentInset.right = contentInset - safeAreaInset 81 | tagsView.contentOffset.x = -contentInset 82 | } 83 | } 84 | 85 | override func didMoveToSuperview() { 86 | super.didMoveToSuperview() 87 | scopeBar?.isHidden = true 88 | scopeBarContainerView?.addSubview(segmentedControl) 89 | scopeBarContainerView?.addSubview(tagsView) 90 | } 91 | 92 | override func layoutSubviews() { 93 | super.layoutSubviews() 94 | layoutSegmentedControl() 95 | layoutTagsView() 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo/Views/TagsView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TagsView.swift 3 | // Apple-Music-Search-Chips-Demo 4 | // 5 | // Created by Seb Vidal on 07/09/2024. 6 | // 7 | 8 | import UIKit 9 | 10 | class TagsView: UIScrollView { 11 | private var bottomStackView: UIStackView! 12 | private var topStackView: UIStackView! 13 | private var backgroundView: UIView! 14 | private var tagMaskView: UIView! 15 | 16 | var titles: [String] = [] { 17 | didSet { updateButtons(for: titles) } 18 | } 19 | 20 | var selectedTagIndex: Int = 0 { 21 | didSet { updateSelection(for: selectedTagIndex) } 22 | } 23 | 24 | override init(frame: CGRect) { 25 | super.init(frame: frame) 26 | setupScrollView() 27 | setupBottomStackView() 28 | setupTopStackView() 29 | setupBackgroundView() 30 | setupTagMaskView() 31 | } 32 | 33 | required init?(coder: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | 37 | private func setupScrollView() { 38 | alwaysBounceHorizontal = true 39 | showsHorizontalScrollIndicator = false 40 | } 41 | 42 | private func setupBottomStackView() { 43 | bottomStackView = UIStackView() 44 | bottomStackView.axis = .horizontal 45 | bottomStackView.distribution = .fillProportionally 46 | bottomStackView.isLayoutMarginsRelativeArrangement = true 47 | bottomStackView.translatesAutoresizingMaskIntoConstraints = false 48 | 49 | addSubview(bottomStackView) 50 | 51 | NSLayoutConstraint.activate([ 52 | bottomStackView.topAnchor.constraint(equalTo: topAnchor), 53 | bottomStackView.leadingAnchor.constraint(equalTo: leadingAnchor), 54 | bottomStackView.trailingAnchor.constraint(equalTo: trailingAnchor), 55 | bottomStackView.bottomAnchor.constraint(equalTo: bottomAnchor) 56 | ]) 57 | } 58 | 59 | private func setupTopStackView() { 60 | topStackView = UIStackView() 61 | topStackView.axis = .horizontal 62 | topStackView.isUserInteractionEnabled = false 63 | topStackView.distribution = .fillProportionally 64 | topStackView.isLayoutMarginsRelativeArrangement = true 65 | topStackView.translatesAutoresizingMaskIntoConstraints = false 66 | 67 | addSubview(topStackView) 68 | 69 | NSLayoutConstraint.activate([ 70 | topStackView.topAnchor.constraint(equalTo: topAnchor), 71 | topStackView.leadingAnchor.constraint(equalTo: leadingAnchor), 72 | topStackView.trailingAnchor.constraint(equalTo: trailingAnchor), 73 | topStackView.bottomAnchor.constraint(equalTo: bottomAnchor) 74 | ]) 75 | } 76 | 77 | private func setupBackgroundView() { 78 | backgroundView = UIView() 79 | backgroundView.clipsToBounds = true 80 | backgroundView.backgroundColor = .tintColor 81 | backgroundView.layer.cornerCurve = .continuous 82 | 83 | insertSubview(backgroundView, aboveSubview: bottomStackView) 84 | } 85 | 86 | private func setupTagMaskView() { 87 | tagMaskView = UIView() 88 | tagMaskView.clipsToBounds = true 89 | tagMaskView.backgroundColor = .black 90 | tagMaskView.layer.cornerCurve = .continuous 91 | 92 | topStackView.mask = tagMaskView 93 | } 94 | 95 | private func updateButtons(for titles: [String]) { 96 | bottomStackView.arrangedSubviews.forEach { subview in 97 | subview.removeFromSuperview() 98 | } 99 | 100 | topStackView.arrangedSubviews.forEach { subview in 101 | subview.removeFromSuperview() 102 | } 103 | 104 | for title in titles { 105 | let bottomButton = button(with: title, foregroundColor: .label) 106 | bottomStackView.addArrangedSubview(bottomButton) 107 | 108 | let topButton = button(with: title, foregroundColor: .white) 109 | topStackView.addArrangedSubview(topButton) 110 | } 111 | } 112 | 113 | private func button(with title: String, foregroundColor: UIColor) -> UIButton { 114 | let titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { container in 115 | var container = container 116 | container.font = UIFont.systemFont(ofSize: 13, weight: .semibold) 117 | 118 | return container 119 | } 120 | 121 | let button = UIButton(type: .system) 122 | button.configuration = .plain() 123 | button.configuration?.title = title 124 | button.configuration?.cornerStyle = .capsule 125 | button.configuration?.baseForegroundColor = foregroundColor 126 | button.configuration?.titleTextAttributesTransformer = titleTextAttributesTransformer 127 | button.configuration?.contentInsets = NSDirectionalEdgeInsets(top: 8.33, leading: 12, bottom: 8, trailing: 12.66) 128 | button.addTarget(self, action: #selector(tagButtonTapped), for: .touchUpInside) 129 | 130 | return button 131 | } 132 | 133 | @objc private func tagButtonTapped(_ sender: UIButton) { 134 | UIView.animate(springDuration: 0.25, bounce: 0.25) { 135 | selectedTagIndex = bottomStackView.arrangedSubviews.firstIndex(of: sender)! 136 | } 137 | } 138 | 139 | private func updateSelection(for selectedTagIndex: Int) { 140 | if bottomStackView.arrangedSubviews.indices.contains(selectedTagIndex) { 141 | let button = bottomStackView.arrangedSubviews[selectedTagIndex] 142 | 143 | tagMaskView.layer.cornerRadius = button.frame.height / 2 144 | tagMaskView.frame = button.frame 145 | 146 | backgroundView.layer.cornerRadius = button.frame.height / 2 147 | backgroundView.frame = button.frame 148 | } 149 | } 150 | 151 | override func layoutSubviews() { 152 | super.layoutSubviews() 153 | 154 | UIView.performWithoutAnimation { [unowned self] in 155 | updateSelection(for: selectedTagIndex) 156 | } 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /Apple-Music-Search-Chips-Demo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 56; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C2AF32522C5D099800B5A315 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AF32512C5D099800B5A315 /* AppDelegate.swift */; }; 11 | C2AF32542C5D099800B5A315 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AF32532C5D099800B5A315 /* SceneDelegate.swift */; }; 12 | C2AF32562C5D099800B5A315 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AF32552C5D099800B5A315 /* ViewController.swift */; }; 13 | C2AF325B2C5D099900B5A315 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C2AF325A2C5D099900B5A315 /* Assets.xcassets */; }; 14 | C2AF325E2C5D099900B5A315 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C2AF325C2C5D099900B5A315 /* LaunchScreen.storyboard */; }; 15 | C2B1EB222C8C4DF200871BB7 /* UISearchBar+ScopeBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B1EB212C8C4DF200871BB7 /* UISearchBar+ScopeBar.swift */; }; 16 | C2B1EB242C8C4E0300871BB7 /* UISearchBar+ScopeBarContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B1EB232C8C4E0300871BB7 /* UISearchBar+ScopeBarContainerView.swift */; }; 17 | C2B1EB272C8C4E1A00871BB7 /* TagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B1EB262C8C4E1A00871BB7 /* TagsView.swift */; }; 18 | C2B1EB2A2C8C4E3700871BB7 /* UISegmentedControl+SetTitles.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B1EB292C8C4E3700871BB7 /* UISegmentedControl+SetTitles.swift */; }; 19 | C2B1EB2C2C8C4E6A00871BB7 /* TaggedSearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B1EB2B2C8C4E6A00871BB7 /* TaggedSearchController.swift */; }; 20 | C2B1EB2E2C8C4EA500871BB7 /* TaggedSearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B1EB2D2C8C4EA500871BB7 /* TaggedSearchBar.swift */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | C2AF324E2C5D099800B5A315 /* Apple-Music-Search-Chips-Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Apple-Music-Search-Chips-Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | C2AF32512C5D099800B5A315 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 26 | C2AF32532C5D099800B5A315 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 27 | C2AF32552C5D099800B5A315 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 28 | C2AF325A2C5D099900B5A315 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 29 | C2AF325D2C5D099900B5A315 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 30 | C2AF325F2C5D099900B5A315 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 31 | C2B1EB212C8C4DF200871BB7 /* UISearchBar+ScopeBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UISearchBar+ScopeBar.swift"; sourceTree = ""; }; 32 | C2B1EB232C8C4E0300871BB7 /* UISearchBar+ScopeBarContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UISearchBar+ScopeBarContainerView.swift"; sourceTree = ""; }; 33 | C2B1EB262C8C4E1A00871BB7 /* TagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagsView.swift; sourceTree = ""; }; 34 | C2B1EB292C8C4E3700871BB7 /* UISegmentedControl+SetTitles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UISegmentedControl+SetTitles.swift"; sourceTree = ""; }; 35 | C2B1EB2B2C8C4E6A00871BB7 /* TaggedSearchController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaggedSearchController.swift; sourceTree = ""; }; 36 | C2B1EB2D2C8C4EA500871BB7 /* TaggedSearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaggedSearchBar.swift; sourceTree = ""; }; 37 | /* End PBXFileReference section */ 38 | 39 | /* Begin PBXFrameworksBuildPhase section */ 40 | C2AF324B2C5D099800B5A315 /* Frameworks */ = { 41 | isa = PBXFrameworksBuildPhase; 42 | buildActionMask = 2147483647; 43 | files = ( 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | C2AF32452C5D099800B5A315 = { 51 | isa = PBXGroup; 52 | children = ( 53 | C2AF32502C5D099800B5A315 /* Apple-Music-Search-Chips-Demo */, 54 | C2AF324F2C5D099800B5A315 /* Products */, 55 | ); 56 | sourceTree = ""; 57 | }; 58 | C2AF324F2C5D099800B5A315 /* Products */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | C2AF324E2C5D099800B5A315 /* Apple-Music-Search-Chips-Demo.app */, 62 | ); 63 | name = Products; 64 | sourceTree = ""; 65 | }; 66 | C2AF32502C5D099800B5A315 /* Apple-Music-Search-Chips-Demo */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | C2B1EB1F2C8C4DB500871BB7 /* Base */, 70 | C2B1EB282C8C4E1D00871BB7 /* Views */, 71 | C2B1EB202C8C4DBA00871BB7 /* View Controllers */, 72 | C2B1EB1E2C8C4DAB00871BB7 /* Supporting Files */, 73 | C2B1EB252C8C4E0600871BB7 /* Extensions */, 74 | ); 75 | path = "Apple-Music-Search-Chips-Demo"; 76 | sourceTree = ""; 77 | }; 78 | C2B1EB1E2C8C4DAB00871BB7 /* Supporting Files */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | C2AF325A2C5D099900B5A315 /* Assets.xcassets */, 82 | C2AF325C2C5D099900B5A315 /* LaunchScreen.storyboard */, 83 | C2AF325F2C5D099900B5A315 /* Info.plist */, 84 | ); 85 | path = "Supporting Files"; 86 | sourceTree = ""; 87 | }; 88 | C2B1EB1F2C8C4DB500871BB7 /* Base */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | C2AF32512C5D099800B5A315 /* AppDelegate.swift */, 92 | C2AF32532C5D099800B5A315 /* SceneDelegate.swift */, 93 | ); 94 | path = Base; 95 | sourceTree = ""; 96 | }; 97 | C2B1EB202C8C4DBA00871BB7 /* View Controllers */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | C2AF32552C5D099800B5A315 /* ViewController.swift */, 101 | C2B1EB2B2C8C4E6A00871BB7 /* TaggedSearchController.swift */, 102 | ); 103 | path = "View Controllers"; 104 | sourceTree = ""; 105 | }; 106 | C2B1EB252C8C4E0600871BB7 /* Extensions */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | C2B1EB212C8C4DF200871BB7 /* UISearchBar+ScopeBar.swift */, 110 | C2B1EB232C8C4E0300871BB7 /* UISearchBar+ScopeBarContainerView.swift */, 111 | C2B1EB292C8C4E3700871BB7 /* UISegmentedControl+SetTitles.swift */, 112 | ); 113 | path = Extensions; 114 | sourceTree = ""; 115 | }; 116 | C2B1EB282C8C4E1D00871BB7 /* Views */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | C2B1EB262C8C4E1A00871BB7 /* TagsView.swift */, 120 | C2B1EB2D2C8C4EA500871BB7 /* TaggedSearchBar.swift */, 121 | ); 122 | path = Views; 123 | sourceTree = ""; 124 | }; 125 | /* End PBXGroup section */ 126 | 127 | /* Begin PBXNativeTarget section */ 128 | C2AF324D2C5D099800B5A315 /* Apple-Music-Search-Chips-Demo */ = { 129 | isa = PBXNativeTarget; 130 | buildConfigurationList = C2AF32622C5D099900B5A315 /* Build configuration list for PBXNativeTarget "Apple-Music-Search-Chips-Demo" */; 131 | buildPhases = ( 132 | C2AF324A2C5D099800B5A315 /* Sources */, 133 | C2AF324B2C5D099800B5A315 /* Frameworks */, 134 | C2AF324C2C5D099800B5A315 /* Resources */, 135 | ); 136 | buildRules = ( 137 | ); 138 | dependencies = ( 139 | ); 140 | name = "Apple-Music-Search-Chips-Demo"; 141 | productName = "Apple-Music-Search-Chips-Demo"; 142 | productReference = C2AF324E2C5D099800B5A315 /* Apple-Music-Search-Chips-Demo.app */; 143 | productType = "com.apple.product-type.application"; 144 | }; 145 | /* End PBXNativeTarget section */ 146 | 147 | /* Begin PBXProject section */ 148 | C2AF32462C5D099800B5A315 /* Project object */ = { 149 | isa = PBXProject; 150 | attributes = { 151 | BuildIndependentTargetsInParallel = 1; 152 | LastSwiftUpdateCheck = 1500; 153 | LastUpgradeCheck = 1500; 154 | TargetAttributes = { 155 | C2AF324D2C5D099800B5A315 = { 156 | CreatedOnToolsVersion = 15.0; 157 | }; 158 | }; 159 | }; 160 | buildConfigurationList = C2AF32492C5D099800B5A315 /* Build configuration list for PBXProject "Apple-Music-Search-Chips-Demo" */; 161 | compatibilityVersion = "Xcode 14.0"; 162 | developmentRegion = en; 163 | hasScannedForEncodings = 0; 164 | knownRegions = ( 165 | en, 166 | Base, 167 | ); 168 | mainGroup = C2AF32452C5D099800B5A315; 169 | productRefGroup = C2AF324F2C5D099800B5A315 /* Products */; 170 | projectDirPath = ""; 171 | projectRoot = ""; 172 | targets = ( 173 | C2AF324D2C5D099800B5A315 /* Apple-Music-Search-Chips-Demo */, 174 | ); 175 | }; 176 | /* End PBXProject section */ 177 | 178 | /* Begin PBXResourcesBuildPhase section */ 179 | C2AF324C2C5D099800B5A315 /* Resources */ = { 180 | isa = PBXResourcesBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | C2AF325E2C5D099900B5A315 /* LaunchScreen.storyboard in Resources */, 184 | C2AF325B2C5D099900B5A315 /* Assets.xcassets in Resources */, 185 | ); 186 | runOnlyForDeploymentPostprocessing = 0; 187 | }; 188 | /* End PBXResourcesBuildPhase section */ 189 | 190 | /* Begin PBXSourcesBuildPhase section */ 191 | C2AF324A2C5D099800B5A315 /* Sources */ = { 192 | isa = PBXSourcesBuildPhase; 193 | buildActionMask = 2147483647; 194 | files = ( 195 | C2B1EB242C8C4E0300871BB7 /* UISearchBar+ScopeBarContainerView.swift in Sources */, 196 | C2B1EB2A2C8C4E3700871BB7 /* UISegmentedControl+SetTitles.swift in Sources */, 197 | C2B1EB222C8C4DF200871BB7 /* UISearchBar+ScopeBar.swift in Sources */, 198 | C2B1EB2E2C8C4EA500871BB7 /* TaggedSearchBar.swift in Sources */, 199 | C2AF32562C5D099800B5A315 /* ViewController.swift in Sources */, 200 | C2AF32522C5D099800B5A315 /* AppDelegate.swift in Sources */, 201 | C2B1EB2C2C8C4E6A00871BB7 /* TaggedSearchController.swift in Sources */, 202 | C2AF32542C5D099800B5A315 /* SceneDelegate.swift in Sources */, 203 | C2B1EB272C8C4E1A00871BB7 /* TagsView.swift in Sources */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | /* End PBXSourcesBuildPhase section */ 208 | 209 | /* Begin PBXVariantGroup section */ 210 | C2AF325C2C5D099900B5A315 /* LaunchScreen.storyboard */ = { 211 | isa = PBXVariantGroup; 212 | children = ( 213 | C2AF325D2C5D099900B5A315 /* Base */, 214 | ); 215 | name = LaunchScreen.storyboard; 216 | sourceTree = ""; 217 | }; 218 | /* End PBXVariantGroup section */ 219 | 220 | /* Begin XCBuildConfiguration section */ 221 | C2AF32602C5D099900B5A315 /* Debug */ = { 222 | isa = XCBuildConfiguration; 223 | buildSettings = { 224 | ALWAYS_SEARCH_USER_PATHS = NO; 225 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 226 | CLANG_ANALYZER_NONNULL = YES; 227 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 228 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 229 | CLANG_ENABLE_MODULES = YES; 230 | CLANG_ENABLE_OBJC_ARC = YES; 231 | CLANG_ENABLE_OBJC_WEAK = YES; 232 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 233 | CLANG_WARN_BOOL_CONVERSION = YES; 234 | CLANG_WARN_COMMA = YES; 235 | CLANG_WARN_CONSTANT_CONVERSION = YES; 236 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 237 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 238 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 239 | CLANG_WARN_EMPTY_BODY = YES; 240 | CLANG_WARN_ENUM_CONVERSION = YES; 241 | CLANG_WARN_INFINITE_RECURSION = YES; 242 | CLANG_WARN_INT_CONVERSION = YES; 243 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 244 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 245 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 246 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 247 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 248 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 249 | CLANG_WARN_STRICT_PROTOTYPES = YES; 250 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 251 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 252 | CLANG_WARN_UNREACHABLE_CODE = YES; 253 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 254 | COPY_PHASE_STRIP = NO; 255 | DEBUG_INFORMATION_FORMAT = dwarf; 256 | ENABLE_STRICT_OBJC_MSGSEND = YES; 257 | ENABLE_TESTABILITY = YES; 258 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 259 | GCC_C_LANGUAGE_STANDARD = gnu17; 260 | GCC_DYNAMIC_NO_PIC = NO; 261 | GCC_NO_COMMON_BLOCKS = YES; 262 | GCC_OPTIMIZATION_LEVEL = 0; 263 | GCC_PREPROCESSOR_DEFINITIONS = ( 264 | "DEBUG=1", 265 | "$(inherited)", 266 | ); 267 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 268 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 269 | GCC_WARN_UNDECLARED_SELECTOR = YES; 270 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 271 | GCC_WARN_UNUSED_FUNCTION = YES; 272 | GCC_WARN_UNUSED_VARIABLE = YES; 273 | IPHONEOS_DEPLOYMENT_TARGET = 17.0; 274 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 275 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 276 | MTL_FAST_MATH = YES; 277 | ONLY_ACTIVE_ARCH = YES; 278 | SDKROOT = iphoneos; 279 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 280 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 281 | }; 282 | name = Debug; 283 | }; 284 | C2AF32612C5D099900B5A315 /* Release */ = { 285 | isa = XCBuildConfiguration; 286 | buildSettings = { 287 | ALWAYS_SEARCH_USER_PATHS = NO; 288 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 289 | CLANG_ANALYZER_NONNULL = YES; 290 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 291 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 292 | CLANG_ENABLE_MODULES = YES; 293 | CLANG_ENABLE_OBJC_ARC = YES; 294 | CLANG_ENABLE_OBJC_WEAK = YES; 295 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 296 | CLANG_WARN_BOOL_CONVERSION = YES; 297 | CLANG_WARN_COMMA = YES; 298 | CLANG_WARN_CONSTANT_CONVERSION = YES; 299 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 300 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 301 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 302 | CLANG_WARN_EMPTY_BODY = YES; 303 | CLANG_WARN_ENUM_CONVERSION = YES; 304 | CLANG_WARN_INFINITE_RECURSION = YES; 305 | CLANG_WARN_INT_CONVERSION = YES; 306 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 307 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 308 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 309 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 310 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 311 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 312 | CLANG_WARN_STRICT_PROTOTYPES = YES; 313 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 314 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 315 | CLANG_WARN_UNREACHABLE_CODE = YES; 316 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 317 | COPY_PHASE_STRIP = NO; 318 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 319 | ENABLE_NS_ASSERTIONS = NO; 320 | ENABLE_STRICT_OBJC_MSGSEND = YES; 321 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 322 | GCC_C_LANGUAGE_STANDARD = gnu17; 323 | GCC_NO_COMMON_BLOCKS = YES; 324 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 325 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 326 | GCC_WARN_UNDECLARED_SELECTOR = YES; 327 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 328 | GCC_WARN_UNUSED_FUNCTION = YES; 329 | GCC_WARN_UNUSED_VARIABLE = YES; 330 | IPHONEOS_DEPLOYMENT_TARGET = 17.0; 331 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 332 | MTL_ENABLE_DEBUG_INFO = NO; 333 | MTL_FAST_MATH = YES; 334 | SDKROOT = iphoneos; 335 | SWIFT_COMPILATION_MODE = wholemodule; 336 | VALIDATE_PRODUCT = YES; 337 | }; 338 | name = Release; 339 | }; 340 | C2AF32632C5D099900B5A315 /* Debug */ = { 341 | isa = XCBuildConfiguration; 342 | buildSettings = { 343 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 344 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 345 | CODE_SIGN_STYLE = Automatic; 346 | CURRENT_PROJECT_VERSION = 1; 347 | DEVELOPMENT_TEAM = DY2GQFY855; 348 | GENERATE_INFOPLIST_FILE = YES; 349 | INFOPLIST_FILE = "Apple-Music-Search-Chips-Demo/Supporting Files/Info.plist"; 350 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 351 | INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; 352 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 353 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 354 | LD_RUNPATH_SEARCH_PATHS = ( 355 | "$(inherited)", 356 | "@executable_path/Frameworks", 357 | ); 358 | MARKETING_VERSION = 1.0; 359 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.Apple-Music-Search-Chips-Demo"; 360 | PRODUCT_NAME = "$(TARGET_NAME)"; 361 | SWIFT_EMIT_LOC_STRINGS = YES; 362 | SWIFT_VERSION = 5.0; 363 | TARGETED_DEVICE_FAMILY = "1,2"; 364 | }; 365 | name = Debug; 366 | }; 367 | C2AF32642C5D099900B5A315 /* Release */ = { 368 | isa = XCBuildConfiguration; 369 | buildSettings = { 370 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 371 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 372 | CODE_SIGN_STYLE = Automatic; 373 | CURRENT_PROJECT_VERSION = 1; 374 | DEVELOPMENT_TEAM = DY2GQFY855; 375 | GENERATE_INFOPLIST_FILE = YES; 376 | INFOPLIST_FILE = "Apple-Music-Search-Chips-Demo/Supporting Files/Info.plist"; 377 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 378 | INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; 379 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 380 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 381 | LD_RUNPATH_SEARCH_PATHS = ( 382 | "$(inherited)", 383 | "@executable_path/Frameworks", 384 | ); 385 | MARKETING_VERSION = 1.0; 386 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.Apple-Music-Search-Chips-Demo"; 387 | PRODUCT_NAME = "$(TARGET_NAME)"; 388 | SWIFT_EMIT_LOC_STRINGS = YES; 389 | SWIFT_VERSION = 5.0; 390 | TARGETED_DEVICE_FAMILY = "1,2"; 391 | }; 392 | name = Release; 393 | }; 394 | /* End XCBuildConfiguration section */ 395 | 396 | /* Begin XCConfigurationList section */ 397 | C2AF32492C5D099800B5A315 /* Build configuration list for PBXProject "Apple-Music-Search-Chips-Demo" */ = { 398 | isa = XCConfigurationList; 399 | buildConfigurations = ( 400 | C2AF32602C5D099900B5A315 /* Debug */, 401 | C2AF32612C5D099900B5A315 /* Release */, 402 | ); 403 | defaultConfigurationIsVisible = 0; 404 | defaultConfigurationName = Release; 405 | }; 406 | C2AF32622C5D099900B5A315 /* Build configuration list for PBXNativeTarget "Apple-Music-Search-Chips-Demo" */ = { 407 | isa = XCConfigurationList; 408 | buildConfigurations = ( 409 | C2AF32632C5D099900B5A315 /* Debug */, 410 | C2AF32642C5D099900B5A315 /* Release */, 411 | ); 412 | defaultConfigurationIsVisible = 0; 413 | defaultConfigurationName = Release; 414 | }; 415 | /* End XCConfigurationList section */ 416 | }; 417 | rootObject = C2AF32462C5D099800B5A315 /* Project object */; 418 | } 419 | --------------------------------------------------------------------------------