├── .gitignore
├── SortedCollection
├── SortedCollection.h
├── Info.plist
└── SortedCollection.swift
├── README.md
├── SortedCollectionTests
├── Info.plist
└── SortedCollectionTests.swift
├── LICENSE
└── SortedCollection.xcodeproj
└── project.pbxproj
/.gitignore:
--------------------------------------------------------------------------------
1 | xcuserdata
2 | *.xcworkspace
3 |
4 |
--------------------------------------------------------------------------------
/SortedCollection/SortedCollection.h:
--------------------------------------------------------------------------------
1 | //
2 | // SortedCollection.h
3 | //
4 | // Created by Nate Cook on 2/23/15.
5 | // Copyright (c) 2015 Nate Cook. Available under the MIT license.
6 | //
7 |
8 | //! Project version number for SortedCollection.
9 | extern double SortedCollectionVersionNumber;
10 |
11 | //! Project version string for SortedCollection.
12 | extern const unsigned char SortedCollectionVersionString[];
13 |
14 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SortedCollection
2 |
3 | This Swift framework provides two types and a protocol, built to demonstrate [Swift collection protocols](http://nshipster.com/swift-collection-protocols).
4 |
5 |
6 | ## Included Types
7 |
8 | - `SortedCollection`: An always-sorted collection of `Comparable` elements. Performance should be *O(N log N)* when adding to the collection, *O(log N)* for lookups, and *O(1)* for iteration or random element access.
9 | - `SortedSlice`: A slice of a `SortedCollection`.
10 | - `SortedCollectionType`: A protocol describing a collection whose elements are guaranteed to always be in ascending order.
11 |
12 |
13 | ## License
14 |
15 | SwiftSets is (c) 2015 Nate Cook and available under the MIT license.
16 |
--------------------------------------------------------------------------------
/SortedCollectionTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | com.natecook.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/SortedCollection/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | com.natecook.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2014 Nate Cook
4 | //
5 | // Permission is hereby granted, free of charge, to any person obtaining a copy
6 | // of this software and associated documentation files (the "Software"), to deal
7 | // in the Software without restriction, including without limitation the rights
8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | // copies of the Software, and to permit persons to whom the Software is
10 | // furnished to do so, subject to the following conditions:
11 | //
12 | // The above copyright notice and this permission notice shall be included in all
13 | // copies or substantial portions of the Software.
14 | //
15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | // SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/SortedCollectionTests/SortedCollectionTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SortedCollectionTests.swift
3 | //
4 | // Created by Nate Cook on 2/23/15.
5 | // Copyright (c) 2015 Nate Cook. Available under the MIT license.
6 | //
7 |
8 | import SortedCollection
9 | import XCTest
10 |
11 | class SortedCollectionTests: XCTestCase {
12 |
13 | /// TODO: Add tests :)
14 |
15 | func testThings() {
16 | let attendees = SortedCollection(["Eddie", "Julianne", "J.K.", "Patricia", "Alejandro"])
17 |
18 | XCTAssertEqual(attendees[0], "Alejandro")
19 | XCTAssertEqual(attendees.count, 5)
20 |
21 | var sortedNumbers = SortedCollection()
22 | sortedNumbers.insert(12)
23 | sortedNumbers.insert(stride(from: 0, through: 25, by: 5))
24 |
25 | XCTAssertEqual(sortedNumbers.count, 7)
26 | XCTAssert(sortedNumbers.contains(12))
27 | XCTAssertFalse(sortedNumbers.contains(3))
28 |
29 | sortedNumbers.insert(5, 6, 7, 8, 9)
30 | sortedNumbers.insert(12)
31 | sortedNumbers.insert(0)
32 | sortedNumbers.insert(9)
33 | sortedNumbers.insert(9)
34 | sortedNumbers.insert(9)
35 | sortedNumbers.insert(9)
36 | sortedNumbers.insert(9)
37 | sortedNumbers.insert(500)
38 | sortedNumbers.insert(-5)
39 |
40 | XCTAssert(isSorted(sortedNumbers))
41 | XCTAssert(sortedNumbers.contains(9))
42 |
43 | while nil != sortedNumbers.remove(9) { }
44 |
45 | XCTAssertFalse(sortedNumbers.contains(9))
46 | }
47 |
48 | func testInsertPerformance() {
49 | func getRandomArray(count: Int) -> [Int] {
50 | var result: [Int] = []
51 | for _ in 0..(seq: S) -> Bool {
70 | var last: S.Generator.Element?
71 | for element in seq {
72 | if element < last {
73 | return false
74 | }
75 | last = element
76 | }
77 |
78 | return true
79 | }
80 |
81 |
--------------------------------------------------------------------------------
/SortedCollection/SortedCollection.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SortedCollection.swift
3 | //
4 | // Created by Nate Cook on 2/23/15.
5 | // Copyright (c) 2015 Nate Cook. Available under the MIT license.
6 | //
7 |
8 |
9 | // MARK: - SortedCollectionType
10 |
11 | /// A *collection* whose elements are guaranteed to always be
12 | /// in ascending order.
13 | public protocol SortedCollectionType : Sliceable, Equatable {
14 | typealias Element : Comparable
15 |
16 | /// Create an empty `SortedCollection`.
17 | init()
18 |
19 | /// Create a new `SortedCollection` with the contents of a given sequence.
20 | init(_ sequence: S)
21 |
22 | /// Returns true iff `value` is found in the collection.
23 | func contains(value: Element) -> Bool
24 |
25 | /// Quickly find the index of a value.
26 | ///
27 | /// :returns: The index of the first instance of `value` in the collection,
28 | /// or `nil` if `value` isn't found.
29 | func indexOf(value: Element) -> Int?
30 |
31 | /// Inserts one or more new values into the collection in the correct order.
32 | mutating func insert(values: Element...)
33 |
34 | /// Inserts the contents of a sequence into the `SortedCollection`.
35 | mutating func insert(values: S)
36 |
37 | /// Removes `value` from the collection if it exists.
38 | ///
39 | /// :returns: The given value if found, otherwise `nil`.
40 | mutating func remove(value: Element) -> Element?
41 |
42 | /// Removes and returns the item at `index`. Requires count > 0.
43 | mutating func removeAtIndex(index: Int) -> Element
44 |
45 | /// Removes all elements from the collection.
46 | mutating func removeAll(#keepCapacity: Bool)
47 | }
48 |
49 |
50 | // MARK: - SortedCollection
51 |
52 | /// An always-sorted collection of `Comparable` elements. Performance should be O(N log N)
53 | /// when adding to the collection, O(log N) for lookups, and O(1) for iteration.
54 | public struct SortedCollection : Printable, SortedCollectionType {
55 | typealias Element = T
56 |
57 | private var contents: [T] = []
58 |
59 | /// The number of elements the `SortedCollection` contains.
60 | public var count: Int {
61 | return contents.count
62 | }
63 |
64 | /// A string representation of the `SortedCollection`.
65 | public var description: String {
66 | return contents.description
67 | }
68 |
69 | /// Create an empty `SortedCollection`.
70 | public init() { }
71 |
72 | /// Create a new `SortedCollection` with the contents of a given sequence.
73 | public init(_ sequence: S) {
74 | contents = sorted(sequence)
75 | }
76 |
77 | /// Create a new `SortedCollection` with the given values.
78 | public init(values: T...) {
79 | contents = sorted(values)
80 | }
81 |
82 | /// Quickly find the index of a value.
83 | ///
84 | /// :returns: The index of the first instance of `value` in the collection,
85 | /// or `nil` if `value` isn't found.
86 | public func indexOf(value: T) -> Int? {
87 | let index = _insertionIndex(contents, forValue: value)
88 | if index == count {
89 | return nil
90 | }
91 | return contents[index] == value ? index : nil
92 | }
93 |
94 | /// Returns true iff `value` is found in the collection.
95 | public func contains(value: T) -> Bool {
96 | return indexOf(value) != nil
97 | }
98 |
99 | /// Returns a new `SortedCollection` with the combined contents of `self` and the given values.
100 | public func merge(values: T...) -> SortedCollection {
101 | return merge(values)
102 | }
103 |
104 | /// Returns a new `SortedCollection` with the combined contents of `self` and the given values.
105 | public func merge(values: S) -> SortedCollection {
106 | return SortedCollection(contents + values)
107 | }
108 |
109 | /// Inserts one or more new values into the collection in the correct order.
110 | public mutating func insert(values: T...) {
111 | for value in values {
112 | contents.insert(value, atIndex: _insertionIndex(contents, forValue: value))
113 | }
114 | }
115 |
116 | /// Inserts the contents of a sequence into the `SortedCollection`.
117 | public mutating func insert(values: S) {
118 | contents = sorted(contents + values)
119 | }
120 |
121 | /// Removes `value` from the collection if it exists.
122 | ///
123 | /// :returns: The given value if found, otherwise `nil`.
124 | public mutating func remove(value: T) -> T? {
125 | if let index = indexOf(value) {
126 | return contents.removeAtIndex(index)
127 | }
128 | return nil
129 | }
130 |
131 | /// Removes and returns the item at `index`. Requires count > 0.
132 | public mutating func removeAtIndex(index: Int) -> T {
133 | return contents.removeAtIndex(index)
134 | }
135 |
136 | /// Removes all elements from the collection.
137 | public mutating func removeAll(keepCapacity: Bool = true) {
138 | contents.removeAll(keepCapacity: keepCapacity)
139 | }
140 | }
141 |
142 | // MARK: SequenceType
143 |
144 | extension SortedCollection : SequenceType {
145 | typealias Generator = GeneratorOf
146 |
147 | /// Returns a generator of the elements of the collection.
148 | public func generate() -> Generator {
149 | return GeneratorOf(contents.generate())
150 | }
151 | }
152 |
153 | // MARK: CollectionType
154 |
155 | extension SortedCollection : CollectionType {
156 | typealias Index = Int
157 |
158 | /// The position of the first element in the collection. (Always zero.)
159 | public var startIndex: Int {
160 | return 0
161 | }
162 |
163 | /// One greater than the position of the last element in the collection. Zero when the collection is empty.
164 | public var endIndex: Int {
165 | return count
166 | }
167 |
168 | /// Accesses the element at index `i`.
169 | ///
170 | /// Read-only to ensure sorting - use `insert` to add new elements.
171 | public subscript(i: Int) -> T {
172 | return contents[i]
173 | }
174 | }
175 |
176 | // MARK: ArrayLiteralConvertible
177 |
178 | extension SortedCollection : ArrayLiteralConvertible {
179 | public init(arrayLiteral elements: T...) {
180 | self.contents = sorted(elements)
181 | }
182 | }
183 |
184 | // MARK: Sliceable
185 |
186 | extension SortedCollection : Sliceable {
187 | typealias SubSlice = SortedSlice
188 |
189 | /// Access the elements in the given range.
190 | public subscript(range: Range) -> SortedSlice {
191 | return SortedSlice(sortedSlice: contents[range])
192 | }
193 | }
194 |
195 |
196 |
197 | // MARK: - SortedSlice
198 |
199 | /// A slice of a `SortedCollection`.
200 | public struct SortedSlice : Printable, SortedCollectionType {
201 | private var contents: Slice = []
202 |
203 | /// The number of elements the `SortedSlice` contains.
204 | public var count: Int {
205 | return contents.count
206 | }
207 |
208 | /// A string representation of the `SortedSlice`.
209 | public var description: String {
210 | return contents.description
211 | }
212 |
213 | /// Create an empty `SortedSlice`.
214 | public init() { }
215 |
216 | /// Create a new `SortedSlice` with the contents of a given sequence.
217 | public init(_ sequence: S) {
218 | contents = Slice(sorted(sequence))
219 | }
220 |
221 | /// Create a new `SortedSlice` with the given values.
222 | public init(values: T...) {
223 | contents = Slice(sorted(values))
224 | }
225 |
226 | /// Create a new `SortedSlice` using a slice of a parent `SortedCollection`s backing array.
227 | private init(sortedSlice: Slice) {
228 | contents = sortedSlice
229 | }
230 |
231 | /// Quickly find the index of a value.
232 | ///
233 | /// :returns: The index of the first instance of `value` in the collection,
234 | /// or `nil` if `value` isn't found.
235 | public func indexOf(value: T) -> Int? {
236 | let index = _insertionIndex(contents, forValue: value)
237 | if index == count {
238 | return nil
239 | }
240 | return contents[index] == value ? index : nil
241 | }
242 |
243 | /// Returns true iff `value` is found in the collection.
244 | public func contains(value: T) -> Bool {
245 | return indexOf(value) != nil
246 | }
247 |
248 | /// Returns a new `SortedCollection` with the combined contents of `self` and the given values.
249 | public func merge(values: T...) -> SortedCollection {
250 | return merge(values)
251 | }
252 |
253 | /// Returns a new `SortedCollection` with the combined contents of `self` and the given values.
254 | public func merge(values: S) -> SortedCollection {
255 | return SortedCollection(contents + values)
256 | }
257 |
258 | /// Inserts one or more new values into the collection in the correct order.
259 | public mutating func insert(values: T...) {
260 | for value in values {
261 | contents.insert(value, atIndex: _insertionIndex(contents, forValue: value))
262 | }
263 | }
264 |
265 | /// Inserts the contents of a sequence into the `SortedSlice`.
266 | public mutating func insert(values: S) {
267 | contents = Slice(sorted(contents + values))
268 | }
269 |
270 | /// Removes `value` from the collection if it exists.
271 | ///
272 | /// :returns: The given value if found, otherwise `nil`.
273 | public mutating func remove(value: T) -> T? {
274 | if let index = indexOf(value) {
275 | return contents.removeAtIndex(index)
276 | }
277 | return nil
278 | }
279 |
280 | /// Removes and returns the item at `index`. Requires count > 0.
281 | public mutating func removeAtIndex(index: Int) -> T {
282 | return contents.removeAtIndex(index)
283 | }
284 |
285 | /// Removes all elements from the collection.
286 | public mutating func removeAll(keepCapacity: Bool = true) {
287 | contents.removeAll(keepCapacity: keepCapacity)
288 | }
289 | }
290 |
291 | // MARK: SequenceType
292 |
293 | extension SortedSlice : SequenceType {
294 | typealias Generator = GeneratorOf
295 |
296 | /// Returns a generator of the elements of the collection.
297 | public func generate() -> Generator {
298 | return GeneratorOf(contents.generate())
299 | }
300 | }
301 |
302 | // MARK: CollectionType
303 |
304 | extension SortedSlice : CollectionType {
305 | typealias Index = Int
306 |
307 | /// The position of the first element in the collection. (Always zero.)
308 | public var startIndex: Int {
309 | return 0
310 | }
311 |
312 | /// One greater than the position of the last element in the collection. Zero when the collection is empty.
313 | public var endIndex: Int {
314 | return count
315 | }
316 |
317 | /// Accesses the element at index `i`.
318 | ///
319 | /// Read-only to ensure sorting - use `insert` to add new elements.
320 | public subscript(i: Int) -> T {
321 | return contents[i]
322 | }
323 | }
324 |
325 | // MARK: ArrayLiteralConvertible
326 |
327 | extension SortedSlice : ArrayLiteralConvertible {
328 | public init(arrayLiteral elements: T...) {
329 | self.contents = Slice(sorted(elements))
330 | }
331 | }
332 |
333 | // MARK: Sliceable
334 |
335 | extension SortedSlice : Sliceable {
336 | typealias SubSlice = SortedSlice
337 |
338 | /// Access the elements in the given range.
339 | public subscript(range: Range) -> SortedSlice {
340 | return SortedSlice(sortedSlice: contents[range])
341 | }
342 | }
343 |
344 |
345 | // MARK: Equatable
346 |
347 | public func ==(lhs: S, rhs: S) -> Bool {
348 | if count(lhs) != count(rhs) {
349 | return false
350 | }
351 |
352 | for (lhs, rhs) in zip(lhs, rhs) {
353 | if lhs != rhs {
354 | return false
355 | }
356 | }
357 |
358 | return true
359 | }
360 |
361 |
362 | // MARK: - Private helper functions
363 |
364 | /// Returns the insertion point for `value` in the collection `c`.
365 | ///
366 | /// Precondition: The collection `c` is sorted in ascending order.
367 | ///
368 | /// If `value` exists at least once in `c`, the returned index will point to the
369 | /// first instance of `value`. Otherwise, it will point to the location where `value`
370 | /// could be inserted, keeping `c` in order.
371 | ///
372 | /// :returns: An index in the range `0...countElements(c)` where `value` can be inserted.
373 | private func _insertionIndex(c: C, forValue value: T) -> Int
375 | {
376 | if isEmpty(c) {
377 | return 0
378 | }
379 |
380 | var (low, high) = (0, c.endIndex - 1)
381 | var mid = 0
382 |
383 | while low < high {
384 | mid = (high - low) / 2 + low
385 | if c[mid] < value {
386 | low = mid + 1
387 | } else {
388 | high = mid
389 | }
390 | }
391 |
392 | if c[low] >= value {
393 | return low
394 | }
395 |
396 | return c.endIndex
397 | }
398 |
399 |
--------------------------------------------------------------------------------
/SortedCollection.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 438649121A9CC2A200C4CEAE /* SortedCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 43A847FE1A9C3E840064AE9A /* SortedCollection.h */; settings = {ATTRIBUTES = (Public, ); }; };
11 | 43A847FF1A9C3E840064AE9A /* SortedCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 43A847FE1A9C3E840064AE9A /* SortedCollection.h */; settings = {ATTRIBUTES = (Public, ); }; };
12 | 43A848051A9C3E840064AE9A /* SortedCollection.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43A847F91A9C3E840064AE9A /* SortedCollection.framework */; };
13 | 43A8480C1A9C3E840064AE9A /* SortedCollectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A8480B1A9C3E840064AE9A /* SortedCollectionTests.swift */; };
14 | 43A848251A9C3EF20064AE9A /* SortedCollection.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43A8481A1A9C3EF20064AE9A /* SortedCollection.framework */; };
15 | 43A848331A9C3F550064AE9A /* SortedCollectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A8480B1A9C3E840064AE9A /* SortedCollectionTests.swift */; };
16 | 43A848361A9C412C0064AE9A /* SortedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A848351A9C412C0064AE9A /* SortedCollection.swift */; };
17 | 43A848371A9C412C0064AE9A /* SortedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A848351A9C412C0064AE9A /* SortedCollection.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXContainerItemProxy section */
21 | 43A848061A9C3E840064AE9A /* PBXContainerItemProxy */ = {
22 | isa = PBXContainerItemProxy;
23 | containerPortal = 43A847F01A9C3E840064AE9A /* Project object */;
24 | proxyType = 1;
25 | remoteGlobalIDString = 43A847F81A9C3E840064AE9A;
26 | remoteInfo = SortedCollection;
27 | };
28 | 43A848261A9C3EF20064AE9A /* PBXContainerItemProxy */ = {
29 | isa = PBXContainerItemProxy;
30 | containerPortal = 43A847F01A9C3E840064AE9A /* Project object */;
31 | proxyType = 1;
32 | remoteGlobalIDString = 43A848191A9C3EF20064AE9A;
33 | remoteInfo = "SortedCollection-Mac";
34 | };
35 | /* End PBXContainerItemProxy section */
36 |
37 | /* Begin PBXFileReference section */
38 | 43A847F91A9C3E840064AE9A /* SortedCollection.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SortedCollection.framework; sourceTree = BUILT_PRODUCTS_DIR; };
39 | 43A847FD1A9C3E840064AE9A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
40 | 43A847FE1A9C3E840064AE9A /* SortedCollection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SortedCollection.h; sourceTree = ""; };
41 | 43A848041A9C3E840064AE9A /* SortedCollectionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SortedCollectionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
42 | 43A8480A1A9C3E840064AE9A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
43 | 43A8480B1A9C3E840064AE9A /* SortedCollectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortedCollectionTests.swift; sourceTree = ""; };
44 | 43A8481A1A9C3EF20064AE9A /* SortedCollection.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SortedCollection.framework; sourceTree = BUILT_PRODUCTS_DIR; };
45 | 43A848241A9C3EF20064AE9A /* SortedCollection-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SortedCollection-MacTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
46 | 43A848351A9C412C0064AE9A /* SortedCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SortedCollection.swift; sourceTree = ""; };
47 | /* End PBXFileReference section */
48 |
49 | /* Begin PBXFrameworksBuildPhase section */
50 | 43A847F51A9C3E840064AE9A /* Frameworks */ = {
51 | isa = PBXFrameworksBuildPhase;
52 | buildActionMask = 2147483647;
53 | files = (
54 | );
55 | runOnlyForDeploymentPostprocessing = 0;
56 | };
57 | 43A848011A9C3E840064AE9A /* Frameworks */ = {
58 | isa = PBXFrameworksBuildPhase;
59 | buildActionMask = 2147483647;
60 | files = (
61 | 43A848051A9C3E840064AE9A /* SortedCollection.framework in Frameworks */,
62 | );
63 | runOnlyForDeploymentPostprocessing = 0;
64 | };
65 | 43A848161A9C3EF20064AE9A /* Frameworks */ = {
66 | isa = PBXFrameworksBuildPhase;
67 | buildActionMask = 2147483647;
68 | files = (
69 | );
70 | runOnlyForDeploymentPostprocessing = 0;
71 | };
72 | 43A848211A9C3EF20064AE9A /* Frameworks */ = {
73 | isa = PBXFrameworksBuildPhase;
74 | buildActionMask = 2147483647;
75 | files = (
76 | 43A848251A9C3EF20064AE9A /* SortedCollection.framework in Frameworks */,
77 | );
78 | runOnlyForDeploymentPostprocessing = 0;
79 | };
80 | /* End PBXFrameworksBuildPhase section */
81 |
82 | /* Begin PBXGroup section */
83 | 43A847EF1A9C3E840064AE9A = {
84 | isa = PBXGroup;
85 | children = (
86 | 43A847FB1A9C3E840064AE9A /* SortedCollection */,
87 | 43A848081A9C3E840064AE9A /* SortedCollectionTests */,
88 | 43A847FA1A9C3E840064AE9A /* Products */,
89 | );
90 | sourceTree = "";
91 | };
92 | 43A847FA1A9C3E840064AE9A /* Products */ = {
93 | isa = PBXGroup;
94 | children = (
95 | 43A847F91A9C3E840064AE9A /* SortedCollection.framework */,
96 | 43A848041A9C3E840064AE9A /* SortedCollectionTests.xctest */,
97 | 43A8481A1A9C3EF20064AE9A /* SortedCollection.framework */,
98 | 43A848241A9C3EF20064AE9A /* SortedCollection-MacTests.xctest */,
99 | );
100 | name = Products;
101 | sourceTree = "";
102 | };
103 | 43A847FB1A9C3E840064AE9A /* SortedCollection */ = {
104 | isa = PBXGroup;
105 | children = (
106 | 43A847FE1A9C3E840064AE9A /* SortedCollection.h */,
107 | 43A848351A9C412C0064AE9A /* SortedCollection.swift */,
108 | 43A847FC1A9C3E840064AE9A /* Supporting Files */,
109 | );
110 | path = SortedCollection;
111 | sourceTree = "";
112 | };
113 | 43A847FC1A9C3E840064AE9A /* Supporting Files */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 43A847FD1A9C3E840064AE9A /* Info.plist */,
117 | );
118 | name = "Supporting Files";
119 | sourceTree = "";
120 | };
121 | 43A848081A9C3E840064AE9A /* SortedCollectionTests */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 43A8480B1A9C3E840064AE9A /* SortedCollectionTests.swift */,
125 | 43A848091A9C3E840064AE9A /* Supporting Files */,
126 | );
127 | path = SortedCollectionTests;
128 | sourceTree = "";
129 | };
130 | 43A848091A9C3E840064AE9A /* Supporting Files */ = {
131 | isa = PBXGroup;
132 | children = (
133 | 43A8480A1A9C3E840064AE9A /* Info.plist */,
134 | );
135 | name = "Supporting Files";
136 | sourceTree = "";
137 | };
138 | /* End PBXGroup section */
139 |
140 | /* Begin PBXHeadersBuildPhase section */
141 | 43A847F61A9C3E840064AE9A /* Headers */ = {
142 | isa = PBXHeadersBuildPhase;
143 | buildActionMask = 2147483647;
144 | files = (
145 | 43A847FF1A9C3E840064AE9A /* SortedCollection.h in Headers */,
146 | );
147 | runOnlyForDeploymentPostprocessing = 0;
148 | };
149 | 43A848171A9C3EF20064AE9A /* Headers */ = {
150 | isa = PBXHeadersBuildPhase;
151 | buildActionMask = 2147483647;
152 | files = (
153 | 438649121A9CC2A200C4CEAE /* SortedCollection.h in Headers */,
154 | );
155 | runOnlyForDeploymentPostprocessing = 0;
156 | };
157 | /* End PBXHeadersBuildPhase section */
158 |
159 | /* Begin PBXNativeTarget section */
160 | 43A847F81A9C3E840064AE9A /* SortedCollection */ = {
161 | isa = PBXNativeTarget;
162 | buildConfigurationList = 43A8480F1A9C3E840064AE9A /* Build configuration list for PBXNativeTarget "SortedCollection" */;
163 | buildPhases = (
164 | 43A847F41A9C3E840064AE9A /* Sources */,
165 | 43A847F51A9C3E840064AE9A /* Frameworks */,
166 | 43A847F61A9C3E840064AE9A /* Headers */,
167 | 43A847F71A9C3E840064AE9A /* Resources */,
168 | );
169 | buildRules = (
170 | );
171 | dependencies = (
172 | );
173 | name = SortedCollection;
174 | productName = SortedCollection;
175 | productReference = 43A847F91A9C3E840064AE9A /* SortedCollection.framework */;
176 | productType = "com.apple.product-type.framework";
177 | };
178 | 43A848031A9C3E840064AE9A /* SortedCollectionTests */ = {
179 | isa = PBXNativeTarget;
180 | buildConfigurationList = 43A848121A9C3E840064AE9A /* Build configuration list for PBXNativeTarget "SortedCollectionTests" */;
181 | buildPhases = (
182 | 43A848001A9C3E840064AE9A /* Sources */,
183 | 43A848011A9C3E840064AE9A /* Frameworks */,
184 | 43A848021A9C3E840064AE9A /* Resources */,
185 | );
186 | buildRules = (
187 | );
188 | dependencies = (
189 | 43A848071A9C3E840064AE9A /* PBXTargetDependency */,
190 | );
191 | name = SortedCollectionTests;
192 | productName = SortedCollectionTests;
193 | productReference = 43A848041A9C3E840064AE9A /* SortedCollectionTests.xctest */;
194 | productType = "com.apple.product-type.bundle.unit-test";
195 | };
196 | 43A848191A9C3EF20064AE9A /* SortedCollection-Mac */ = {
197 | isa = PBXNativeTarget;
198 | buildConfigurationList = 43A8482D1A9C3EF20064AE9A /* Build configuration list for PBXNativeTarget "SortedCollection-Mac" */;
199 | buildPhases = (
200 | 43A848151A9C3EF20064AE9A /* Sources */,
201 | 43A848161A9C3EF20064AE9A /* Frameworks */,
202 | 43A848171A9C3EF20064AE9A /* Headers */,
203 | 43A848181A9C3EF20064AE9A /* Resources */,
204 | );
205 | buildRules = (
206 | );
207 | dependencies = (
208 | );
209 | name = "SortedCollection-Mac";
210 | productName = "SortedCollection-Mac";
211 | productReference = 43A8481A1A9C3EF20064AE9A /* SortedCollection.framework */;
212 | productType = "com.apple.product-type.framework";
213 | };
214 | 43A848231A9C3EF20064AE9A /* SortedCollection-MacTests */ = {
215 | isa = PBXNativeTarget;
216 | buildConfigurationList = 43A848301A9C3EF20064AE9A /* Build configuration list for PBXNativeTarget "SortedCollection-MacTests" */;
217 | buildPhases = (
218 | 43A848201A9C3EF20064AE9A /* Sources */,
219 | 43A848211A9C3EF20064AE9A /* Frameworks */,
220 | 43A848221A9C3EF20064AE9A /* Resources */,
221 | );
222 | buildRules = (
223 | );
224 | dependencies = (
225 | 43A848271A9C3EF20064AE9A /* PBXTargetDependency */,
226 | );
227 | name = "SortedCollection-MacTests";
228 | productName = "SortedCollection-MacTests";
229 | productReference = 43A848241A9C3EF20064AE9A /* SortedCollection-MacTests.xctest */;
230 | productType = "com.apple.product-type.bundle.unit-test";
231 | };
232 | /* End PBXNativeTarget section */
233 |
234 | /* Begin PBXProject section */
235 | 43A847F01A9C3E840064AE9A /* Project object */ = {
236 | isa = PBXProject;
237 | attributes = {
238 | LastUpgradeCheck = 0630;
239 | ORGANIZATIONNAME = "Nate Cook";
240 | TargetAttributes = {
241 | 43A847F81A9C3E840064AE9A = {
242 | CreatedOnToolsVersion = 6.3;
243 | };
244 | 43A848031A9C3E840064AE9A = {
245 | CreatedOnToolsVersion = 6.3;
246 | };
247 | 43A848191A9C3EF20064AE9A = {
248 | CreatedOnToolsVersion = 6.3;
249 | };
250 | 43A848231A9C3EF20064AE9A = {
251 | CreatedOnToolsVersion = 6.3;
252 | };
253 | };
254 | };
255 | buildConfigurationList = 43A847F31A9C3E840064AE9A /* Build configuration list for PBXProject "SortedCollection" */;
256 | compatibilityVersion = "Xcode 3.2";
257 | developmentRegion = English;
258 | hasScannedForEncodings = 0;
259 | knownRegions = (
260 | en,
261 | );
262 | mainGroup = 43A847EF1A9C3E840064AE9A;
263 | productRefGroup = 43A847FA1A9C3E840064AE9A /* Products */;
264 | projectDirPath = "";
265 | projectRoot = "";
266 | targets = (
267 | 43A847F81A9C3E840064AE9A /* SortedCollection */,
268 | 43A848031A9C3E840064AE9A /* SortedCollectionTests */,
269 | 43A848191A9C3EF20064AE9A /* SortedCollection-Mac */,
270 | 43A848231A9C3EF20064AE9A /* SortedCollection-MacTests */,
271 | );
272 | };
273 | /* End PBXProject section */
274 |
275 | /* Begin PBXResourcesBuildPhase section */
276 | 43A847F71A9C3E840064AE9A /* Resources */ = {
277 | isa = PBXResourcesBuildPhase;
278 | buildActionMask = 2147483647;
279 | files = (
280 | );
281 | runOnlyForDeploymentPostprocessing = 0;
282 | };
283 | 43A848021A9C3E840064AE9A /* Resources */ = {
284 | isa = PBXResourcesBuildPhase;
285 | buildActionMask = 2147483647;
286 | files = (
287 | );
288 | runOnlyForDeploymentPostprocessing = 0;
289 | };
290 | 43A848181A9C3EF20064AE9A /* Resources */ = {
291 | isa = PBXResourcesBuildPhase;
292 | buildActionMask = 2147483647;
293 | files = (
294 | );
295 | runOnlyForDeploymentPostprocessing = 0;
296 | };
297 | 43A848221A9C3EF20064AE9A /* Resources */ = {
298 | isa = PBXResourcesBuildPhase;
299 | buildActionMask = 2147483647;
300 | files = (
301 | );
302 | runOnlyForDeploymentPostprocessing = 0;
303 | };
304 | /* End PBXResourcesBuildPhase section */
305 |
306 | /* Begin PBXSourcesBuildPhase section */
307 | 43A847F41A9C3E840064AE9A /* Sources */ = {
308 | isa = PBXSourcesBuildPhase;
309 | buildActionMask = 2147483647;
310 | files = (
311 | 43A848361A9C412C0064AE9A /* SortedCollection.swift in Sources */,
312 | );
313 | runOnlyForDeploymentPostprocessing = 0;
314 | };
315 | 43A848001A9C3E840064AE9A /* Sources */ = {
316 | isa = PBXSourcesBuildPhase;
317 | buildActionMask = 2147483647;
318 | files = (
319 | 43A8480C1A9C3E840064AE9A /* SortedCollectionTests.swift in Sources */,
320 | );
321 | runOnlyForDeploymentPostprocessing = 0;
322 | };
323 | 43A848151A9C3EF20064AE9A /* Sources */ = {
324 | isa = PBXSourcesBuildPhase;
325 | buildActionMask = 2147483647;
326 | files = (
327 | 43A848371A9C412C0064AE9A /* SortedCollection.swift in Sources */,
328 | );
329 | runOnlyForDeploymentPostprocessing = 0;
330 | };
331 | 43A848201A9C3EF20064AE9A /* Sources */ = {
332 | isa = PBXSourcesBuildPhase;
333 | buildActionMask = 2147483647;
334 | files = (
335 | 43A848331A9C3F550064AE9A /* SortedCollectionTests.swift in Sources */,
336 | );
337 | runOnlyForDeploymentPostprocessing = 0;
338 | };
339 | /* End PBXSourcesBuildPhase section */
340 |
341 | /* Begin PBXTargetDependency section */
342 | 43A848071A9C3E840064AE9A /* PBXTargetDependency */ = {
343 | isa = PBXTargetDependency;
344 | target = 43A847F81A9C3E840064AE9A /* SortedCollection */;
345 | targetProxy = 43A848061A9C3E840064AE9A /* PBXContainerItemProxy */;
346 | };
347 | 43A848271A9C3EF20064AE9A /* PBXTargetDependency */ = {
348 | isa = PBXTargetDependency;
349 | target = 43A848191A9C3EF20064AE9A /* SortedCollection-Mac */;
350 | targetProxy = 43A848261A9C3EF20064AE9A /* PBXContainerItemProxy */;
351 | };
352 | /* End PBXTargetDependency section */
353 |
354 | /* Begin XCBuildConfiguration section */
355 | 43A8480D1A9C3E840064AE9A /* Debug */ = {
356 | isa = XCBuildConfiguration;
357 | buildSettings = {
358 | ALWAYS_SEARCH_USER_PATHS = NO;
359 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
360 | CLANG_CXX_LIBRARY = "libc++";
361 | CLANG_ENABLE_MODULES = YES;
362 | CLANG_ENABLE_OBJC_ARC = YES;
363 | CLANG_WARN_BOOL_CONVERSION = YES;
364 | CLANG_WARN_CONSTANT_CONVERSION = YES;
365 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
366 | CLANG_WARN_EMPTY_BODY = YES;
367 | CLANG_WARN_ENUM_CONVERSION = YES;
368 | CLANG_WARN_INT_CONVERSION = YES;
369 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
370 | CLANG_WARN_UNREACHABLE_CODE = YES;
371 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
372 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
373 | COPY_PHASE_STRIP = NO;
374 | CURRENT_PROJECT_VERSION = 1;
375 | DEBUG_INFORMATION_FORMAT = dwarf;
376 | ENABLE_STRICT_OBJC_MSGSEND = YES;
377 | GCC_C_LANGUAGE_STANDARD = gnu99;
378 | GCC_DYNAMIC_NO_PIC = NO;
379 | GCC_OPTIMIZATION_LEVEL = 0;
380 | GCC_PREPROCESSOR_DEFINITIONS = (
381 | "DEBUG=1",
382 | "$(inherited)",
383 | );
384 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
385 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
386 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
387 | GCC_WARN_UNDECLARED_SELECTOR = YES;
388 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
389 | GCC_WARN_UNUSED_FUNCTION = YES;
390 | GCC_WARN_UNUSED_VARIABLE = YES;
391 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
392 | MACOSX_DEPLOYMENT_TARGET = 10.9;
393 | MTL_ENABLE_DEBUG_INFO = YES;
394 | ONLY_ACTIVE_ARCH = YES;
395 | SDKROOT = iphoneos;
396 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
397 | TARGETED_DEVICE_FAMILY = "1,2";
398 | VERSIONING_SYSTEM = "apple-generic";
399 | VERSION_INFO_PREFIX = "";
400 | };
401 | name = Debug;
402 | };
403 | 43A8480E1A9C3E840064AE9A /* Release */ = {
404 | isa = XCBuildConfiguration;
405 | buildSettings = {
406 | ALWAYS_SEARCH_USER_PATHS = NO;
407 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
408 | CLANG_CXX_LIBRARY = "libc++";
409 | CLANG_ENABLE_MODULES = YES;
410 | CLANG_ENABLE_OBJC_ARC = YES;
411 | CLANG_WARN_BOOL_CONVERSION = YES;
412 | CLANG_WARN_CONSTANT_CONVERSION = YES;
413 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
414 | CLANG_WARN_EMPTY_BODY = YES;
415 | CLANG_WARN_ENUM_CONVERSION = YES;
416 | CLANG_WARN_INT_CONVERSION = YES;
417 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
418 | CLANG_WARN_UNREACHABLE_CODE = YES;
419 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
420 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
421 | COPY_PHASE_STRIP = NO;
422 | CURRENT_PROJECT_VERSION = 1;
423 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
424 | ENABLE_NS_ASSERTIONS = NO;
425 | ENABLE_STRICT_OBJC_MSGSEND = YES;
426 | GCC_C_LANGUAGE_STANDARD = gnu99;
427 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
428 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
429 | GCC_WARN_UNDECLARED_SELECTOR = YES;
430 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
431 | GCC_WARN_UNUSED_FUNCTION = YES;
432 | GCC_WARN_UNUSED_VARIABLE = YES;
433 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
434 | MACOSX_DEPLOYMENT_TARGET = 10.9;
435 | MTL_ENABLE_DEBUG_INFO = NO;
436 | SDKROOT = iphoneos;
437 | TARGETED_DEVICE_FAMILY = "1,2";
438 | VALIDATE_PRODUCT = YES;
439 | VERSIONING_SYSTEM = "apple-generic";
440 | VERSION_INFO_PREFIX = "";
441 | };
442 | name = Release;
443 | };
444 | 43A848101A9C3E840064AE9A /* Debug */ = {
445 | isa = XCBuildConfiguration;
446 | buildSettings = {
447 | DEFINES_MODULE = YES;
448 | DYLIB_COMPATIBILITY_VERSION = 1;
449 | DYLIB_CURRENT_VERSION = 1;
450 | DYLIB_INSTALL_NAME_BASE = "@rpath";
451 | INFOPLIST_FILE = SortedCollection/Info.plist;
452 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
453 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
454 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
455 | PRODUCT_NAME = "$(TARGET_NAME)";
456 | SKIP_INSTALL = YES;
457 | };
458 | name = Debug;
459 | };
460 | 43A848111A9C3E840064AE9A /* Release */ = {
461 | isa = XCBuildConfiguration;
462 | buildSettings = {
463 | DEFINES_MODULE = YES;
464 | DYLIB_COMPATIBILITY_VERSION = 1;
465 | DYLIB_CURRENT_VERSION = 1;
466 | DYLIB_INSTALL_NAME_BASE = "@rpath";
467 | INFOPLIST_FILE = SortedCollection/Info.plist;
468 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
469 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
470 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
471 | PRODUCT_NAME = "$(TARGET_NAME)";
472 | SKIP_INSTALL = YES;
473 | };
474 | name = Release;
475 | };
476 | 43A848131A9C3E840064AE9A /* Debug */ = {
477 | isa = XCBuildConfiguration;
478 | buildSettings = {
479 | FRAMEWORK_SEARCH_PATHS = (
480 | "$(SDKROOT)/Developer/Library/Frameworks",
481 | "$(inherited)",
482 | );
483 | GCC_PREPROCESSOR_DEFINITIONS = (
484 | "DEBUG=1",
485 | "$(inherited)",
486 | );
487 | INFOPLIST_FILE = SortedCollectionTests/Info.plist;
488 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
489 | PRODUCT_NAME = "$(TARGET_NAME)";
490 | };
491 | name = Debug;
492 | };
493 | 43A848141A9C3E840064AE9A /* Release */ = {
494 | isa = XCBuildConfiguration;
495 | buildSettings = {
496 | FRAMEWORK_SEARCH_PATHS = (
497 | "$(SDKROOT)/Developer/Library/Frameworks",
498 | "$(inherited)",
499 | );
500 | INFOPLIST_FILE = SortedCollectionTests/Info.plist;
501 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
502 | PRODUCT_NAME = "$(TARGET_NAME)";
503 | };
504 | name = Release;
505 | };
506 | 43A8482E1A9C3EF20064AE9A /* Debug */ = {
507 | isa = XCBuildConfiguration;
508 | buildSettings = {
509 | COMBINE_HIDPI_IMAGES = YES;
510 | DEFINES_MODULE = YES;
511 | DYLIB_COMPATIBILITY_VERSION = 1;
512 | DYLIB_CURRENT_VERSION = 1;
513 | DYLIB_INSTALL_NAME_BASE = "@rpath";
514 | FRAMEWORK_VERSION = A;
515 | GCC_PREPROCESSOR_DEFINITIONS = (
516 | "DEBUG=1",
517 | "$(inherited)",
518 | );
519 | INFOPLIST_FILE = "$(SRCROOT)/SortedCollection/Info.plist";
520 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
521 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
522 | MACOSX_DEPLOYMENT_TARGET = 10.9;
523 | PRODUCT_NAME = SortedCollection;
524 | SDKROOT = macosx;
525 | SKIP_INSTALL = YES;
526 | };
527 | name = Debug;
528 | };
529 | 43A8482F1A9C3EF20064AE9A /* Release */ = {
530 | isa = XCBuildConfiguration;
531 | buildSettings = {
532 | COMBINE_HIDPI_IMAGES = YES;
533 | DEFINES_MODULE = YES;
534 | DYLIB_COMPATIBILITY_VERSION = 1;
535 | DYLIB_CURRENT_VERSION = 1;
536 | DYLIB_INSTALL_NAME_BASE = "@rpath";
537 | FRAMEWORK_VERSION = A;
538 | INFOPLIST_FILE = "$(SRCROOT)/SortedCollection/Info.plist";
539 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
540 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
541 | MACOSX_DEPLOYMENT_TARGET = 10.9;
542 | PRODUCT_NAME = SortedCollection;
543 | SDKROOT = macosx;
544 | SKIP_INSTALL = YES;
545 | };
546 | name = Release;
547 | };
548 | 43A848311A9C3EF20064AE9A /* Debug */ = {
549 | isa = XCBuildConfiguration;
550 | buildSettings = {
551 | COMBINE_HIDPI_IMAGES = YES;
552 | FRAMEWORK_SEARCH_PATHS = (
553 | "$(DEVELOPER_FRAMEWORKS_DIR)",
554 | "$(inherited)",
555 | );
556 | GCC_PREPROCESSOR_DEFINITIONS = (
557 | "DEBUG=1",
558 | "$(inherited)",
559 | );
560 | INFOPLIST_FILE = SortedCollection/Info.plist;
561 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
562 | MACOSX_DEPLOYMENT_TARGET = 10.10;
563 | PRODUCT_NAME = "$(TARGET_NAME)";
564 | SDKROOT = macosx;
565 | };
566 | name = Debug;
567 | };
568 | 43A848321A9C3EF20064AE9A /* Release */ = {
569 | isa = XCBuildConfiguration;
570 | buildSettings = {
571 | COMBINE_HIDPI_IMAGES = YES;
572 | FRAMEWORK_SEARCH_PATHS = (
573 | "$(DEVELOPER_FRAMEWORKS_DIR)",
574 | "$(inherited)",
575 | );
576 | INFOPLIST_FILE = SortedCollection/Info.plist;
577 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
578 | MACOSX_DEPLOYMENT_TARGET = 10.10;
579 | PRODUCT_NAME = "$(TARGET_NAME)";
580 | SDKROOT = macosx;
581 | };
582 | name = Release;
583 | };
584 | /* End XCBuildConfiguration section */
585 |
586 | /* Begin XCConfigurationList section */
587 | 43A847F31A9C3E840064AE9A /* Build configuration list for PBXProject "SortedCollection" */ = {
588 | isa = XCConfigurationList;
589 | buildConfigurations = (
590 | 43A8480D1A9C3E840064AE9A /* Debug */,
591 | 43A8480E1A9C3E840064AE9A /* Release */,
592 | );
593 | defaultConfigurationIsVisible = 0;
594 | defaultConfigurationName = Release;
595 | };
596 | 43A8480F1A9C3E840064AE9A /* Build configuration list for PBXNativeTarget "SortedCollection" */ = {
597 | isa = XCConfigurationList;
598 | buildConfigurations = (
599 | 43A848101A9C3E840064AE9A /* Debug */,
600 | 43A848111A9C3E840064AE9A /* Release */,
601 | );
602 | defaultConfigurationIsVisible = 0;
603 | defaultConfigurationName = Release;
604 | };
605 | 43A848121A9C3E840064AE9A /* Build configuration list for PBXNativeTarget "SortedCollectionTests" */ = {
606 | isa = XCConfigurationList;
607 | buildConfigurations = (
608 | 43A848131A9C3E840064AE9A /* Debug */,
609 | 43A848141A9C3E840064AE9A /* Release */,
610 | );
611 | defaultConfigurationIsVisible = 0;
612 | defaultConfigurationName = Release;
613 | };
614 | 43A8482D1A9C3EF20064AE9A /* Build configuration list for PBXNativeTarget "SortedCollection-Mac" */ = {
615 | isa = XCConfigurationList;
616 | buildConfigurations = (
617 | 43A8482E1A9C3EF20064AE9A /* Debug */,
618 | 43A8482F1A9C3EF20064AE9A /* Release */,
619 | );
620 | defaultConfigurationIsVisible = 0;
621 | defaultConfigurationName = Release;
622 | };
623 | 43A848301A9C3EF20064AE9A /* Build configuration list for PBXNativeTarget "SortedCollection-MacTests" */ = {
624 | isa = XCConfigurationList;
625 | buildConfigurations = (
626 | 43A848311A9C3EF20064AE9A /* Debug */,
627 | 43A848321A9C3EF20064AE9A /* Release */,
628 | );
629 | defaultConfigurationIsVisible = 0;
630 | defaultConfigurationName = Release;
631 | };
632 | /* End XCConfigurationList section */
633 | };
634 | rootObject = 43A847F01A9C3E840064AE9A /* Project object */;
635 | }
636 |
--------------------------------------------------------------------------------