├── Cartfile ├── Cartfile.private ├── EditableProperty.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ └── xcschemes │ │ ├── EditableProperty-Mac.xcscheme │ │ └── EditableProperty-iOS.xcscheme └── project.pbxproj ├── Cartfile.resolved ├── README.md ├── EditableProperty ├── EditableProperty.h ├── Info.plist ├── Editor.swift ├── Committed.swift └── EditableProperty.swift ├── .gitignore ├── .gitmodules ├── EditablePropertyTests ├── Info.plist └── EditablePropertySpec.swift └── LICENSE.md /Cartfile: -------------------------------------------------------------------------------- 1 | github "ReactiveCocoa/ReactiveCocoa" "v3.0-beta.8" 2 | -------------------------------------------------------------------------------- /Cartfile.private: -------------------------------------------------------------------------------- 1 | github "Quick/Quick" ~> 0.3 2 | github "Quick/Nimble" ~> 0.4 3 | github "jspahrsummers/xcconfigs" ~> 0.8 4 | -------------------------------------------------------------------------------- /EditableProperty.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "robrix/Box" "1.2.2" 2 | github "Quick/Nimble" "v0.4.2" 3 | github "Quick/Quick" "v0.3.1" 4 | github "jspahrsummers/xcconfigs" "0.8.1" 5 | github "antitypical/Result" "0.4.4" 6 | github "ReactiveCocoa/ReactiveCocoa" "b89e1b73f2d1c6a99e0916f699ab6dcda71c74b5" 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EditableProperty 2 | 3 | Multi-way bindings for [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa). 4 | 5 | ## Getting Started 6 | 7 | This project uses [Carthage](https://github.com/Carthage/Carthage) to manage its dependencies. 8 | 9 | Once Carthage is installed, you can simply clone the repository, then run `carthage bootstrap` to set it up. 10 | -------------------------------------------------------------------------------- /EditableProperty/EditableProperty.h: -------------------------------------------------------------------------------- 1 | // 2 | // EditableProperty.h 3 | // EditableProperty 4 | // 5 | // Created by Justin Spahr-Summers on 2015-05-01. 6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for EditableProperty. 12 | FOUNDATION_EXPORT double EditablePropertyVersionNumber; 13 | 14 | //! Project version string for EditableProperty. 15 | FOUNDATION_EXPORT const unsigned char EditablePropertyVersionString[]; 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | # Pods/ 27 | 28 | Carthage/ 29 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Carthage/Checkouts/Box"] 2 | path = Carthage/Checkouts/Box 3 | url = https://github.com/robrix/Box.git 4 | [submodule "Carthage/Checkouts/Nimble"] 5 | path = Carthage/Checkouts/Nimble 6 | url = https://github.com/Quick/Nimble.git 7 | [submodule "Carthage/Checkouts/Quick"] 8 | path = Carthage/Checkouts/Quick 9 | url = https://github.com/Quick/Quick.git 10 | [submodule "Carthage/Checkouts/xcconfigs"] 11 | path = Carthage/Checkouts/xcconfigs 12 | url = https://github.com/jspahrsummers/xcconfigs.git 13 | [submodule "Carthage/Checkouts/Result"] 14 | path = Carthage/Checkouts/Result 15 | url = https://github.com/antitypical/Result.git 16 | [submodule "Carthage/Checkouts/ReactiveCocoa"] 17 | path = Carthage/Checkouts/ReactiveCocoa 18 | url = https://github.com/ReactiveCocoa/ReactiveCocoa.git 19 | -------------------------------------------------------------------------------- /EditablePropertyTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.ReactiveCocoa.$(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 | -------------------------------------------------------------------------------- /EditableProperty/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.ReactiveCocoa.$(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 | NSHumanReadableCopyright 24 | Copyright © 2015 ReactiveCocoa. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) ReactiveCocoa contributors 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 | -------------------------------------------------------------------------------- /EditablePropertyTests/EditablePropertySpec.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EditablePropertySpec.swift 3 | // EditableProperty 4 | // 5 | // Created by Justin Spahr-Summers on 2015-05-01. 6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved. 7 | // 8 | 9 | import Nimble 10 | import Quick 11 | 12 | import EditableProperty 13 | import ReactiveCocoa 14 | 15 | typealias TestEditor = Editor 16 | 17 | class EditablePropertySpec: QuickSpec { 18 | override func spec() { 19 | it("should do some binding magic") { 20 | let defaultValue = MutableProperty(0) 21 | 22 | let property = EditableProperty(defaultValue: defaultValue, editsTakePriority: false) 23 | expect(property.value).to(equal(defaultValue.value)) 24 | 25 | let (editsProducer, editsSink) = SignalProducer.buffer(0) 26 | let editor = Editor(edits: editsProducer) { committed, proposed in 27 | return SignalProducer(value: max(committed.value, proposed)) 28 | } 29 | 30 | property <~ editor 31 | 32 | defaultValue.value = 1 33 | expect(property.value).to(equal(defaultValue.value)) 34 | 35 | let tryEdit: Int -> () = { proposed in 36 | let (editSignal, editSink) = TestEditor.EditSession.pipe() 37 | sendNext(editsSink, editSignal) 38 | expect(property.value).to(equal(defaultValue.value)) 39 | 40 | sendNext(editSink, proposed) 41 | expect(property.value).to(equal(defaultValue.value)) 42 | 43 | sendCompleted(editSink) 44 | } 45 | 46 | tryEdit(2) 47 | expect(property.value).to(equal(2)) 48 | 49 | defaultValue.value = 3 50 | expect(property.value).to(equal(defaultValue.value)) 51 | 52 | tryEdit(2) 53 | expect(property.value).to(equal(defaultValue.value)) 54 | 55 | tryEdit(4) 56 | expect(property.value).to(equal(4)) 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /EditableProperty/Editor.swift: -------------------------------------------------------------------------------- 1 | import ReactiveCocoa 2 | 3 | /// Represents an editor that can propose changes to properties, and then commit 4 | /// those changes when editing has completed. 5 | /// 6 | /// Editors have identity, which is useful for ignoring an editor's own changes 7 | /// during property observation. 8 | public final class Editor { 9 | /// Represents a single editing session. A signal of this type should send: 10 | /// 11 | /// - .Next events as edits are proposed 12 | /// - .Error if an error occurs during editing 13 | /// - .Completed if editing finishes successfully, and the result should 14 | /// be committed 15 | /// - .Interrupted if editing is cancelled, and the result should be 16 | /// discarded 17 | public typealias EditSession = Signal 18 | 19 | /// Produces signals that represent distinct editing sessions. 20 | /// 21 | /// Events should not be sent upon each inner signal until the signal 22 | /// instance itself has been sent along the `edits` producer. 23 | public let edits: SignalProducer 24 | 25 | private let _mergeCommittedValue: (Committed, Value) -> SignalProducer 26 | 27 | /// Asks the editor to merge its proposed value with the most recent 28 | /// validated value that was actually committed to the property. 29 | /// 30 | /// The property will take the final value of the returned producer, unless 31 | /// another value is proposed by this editor first, or another editor 32 | /// commits a validated value. 33 | public func mergeCommittedValue(committedValue: Committed, intoProposedValue proposedValue: Value) -> SignalProducer { 34 | return _mergeCommittedValue(committedValue, proposedValue) 35 | } 36 | 37 | /// Instantiates an editor with the given behaviors. 38 | public init(edits: SignalProducer, mergeCommittedValue: (Committed, Value) -> SignalProducer) { 39 | self.edits = edits 40 | self._mergeCommittedValue = mergeCommittedValue 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /EditableProperty/Committed.swift: -------------------------------------------------------------------------------- 1 | import Box 2 | import ReactiveCocoa 3 | 4 | /// Represents a committed change to the value of an EditableProperty. 5 | public enum Committed { 6 | /// The change is an automatic update to a new default value. 7 | case DefaultValue(Box) 8 | 9 | /// The change is a new value that has been explicitly set _without_ an 10 | /// editor. 11 | /// 12 | /// This might occur from setting `value` directly, or by explicitly binding 13 | /// signals, producers, or other properties to the EditableProperty. 14 | case ExplicitUpdate(Box) 15 | 16 | /// The value was validated and committed by the given editor. 17 | case ValidatedEdit(Box, Editor) 18 | 19 | /// The value that was committed. 20 | public var value: Value { 21 | switch self { 22 | case let .DefaultValue(value): 23 | return value.value 24 | 25 | case let .ExplicitUpdate(value): 26 | return value.value 27 | 28 | case let .ValidatedEdit(value, _): 29 | return value.value 30 | } 31 | } 32 | 33 | /// Whether this change represents a user-initiated edit. 34 | public var isEdit: Bool { 35 | switch self { 36 | case .ValidatedEdit: 37 | return true 38 | 39 | case .DefaultValue, .ExplicitUpdate: 40 | return false 41 | } 42 | } 43 | } 44 | 45 | public func == (lhs: Committed, rhs: Committed) -> Bool { 46 | switch (lhs, rhs) { 47 | case (.DefaultValue, .DefaultValue), (.ExplicitUpdate, .ExplicitUpdate): 48 | return lhs.value == rhs.value 49 | 50 | case let (.ValidatedEdit(_, left), .ValidatedEdit(_, right)): 51 | return left === right && lhs.value == rhs.value 52 | 53 | default: 54 | return false 55 | } 56 | } 57 | 58 | extension Committed: Printable { 59 | public var description: String { 60 | let value = self.value 61 | 62 | switch self { 63 | case .DefaultValue: 64 | return "DefaultValue(\(value))" 65 | 66 | case .ExplicitUpdate: 67 | return "ExplicitUpdate(\(value))" 68 | 69 | case .ValidatedEdit: 70 | return "ValidatedEdit(\(value))" 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /EditableProperty.xcodeproj/xcshareddata/xcschemes/EditableProperty-Mac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 94 | 100 | 101 | 102 | 103 | 105 | 106 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /EditableProperty.xcodeproj/xcshareddata/xcschemes/EditableProperty-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 94 | 100 | 101 | 102 | 103 | 105 | 106 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /EditableProperty/EditableProperty.swift: -------------------------------------------------------------------------------- 1 | import Box 2 | import ReactiveCocoa 3 | 4 | /// A property of type `Value` that Editors can propose and commit changes to. 5 | /// 6 | /// This can be used to implement multi-way bindings, where each "side" of the 7 | /// binding is a separate editor that ignores changes made by itself. 8 | public final class EditableProperty { 9 | /// The current value of the property, along with information about how that 10 | /// value was obtained. 11 | public var committedValue: PropertyOf> { 12 | return PropertyOf(_committedValue) 13 | } 14 | 15 | private let _committedValue: MutableProperty> 16 | 17 | /// Sends any errors that occur during edit validation, from any editor. 18 | public let validationErrors: Signal 19 | private let validationErrorsSink: Signal.Observer 20 | 21 | /// Initializes an editable property that will have the given default 22 | /// values while no edits have yet occurred. 23 | /// 24 | /// If `editsTakePriority` is true, any edits will permanently override 25 | /// `defaultValue`. Otherwise, new default values may replace 26 | /// user-initiated edits. 27 | public init(defaultValue: P, editsTakePriority: Bool) { 28 | (validationErrors, validationErrorsSink) = Signal.pipe() 29 | 30 | _committedValue = MutableProperty(.DefaultValue(Box(defaultValue.value))) 31 | 32 | var defaults = defaultValue.producer 33 | |> map { Committed.DefaultValue(Box($0)) } 34 | 35 | if editsTakePriority { 36 | let hasBeenEdited = _committedValue.producer 37 | |> filter { $0.isEdit } 38 | |> map { _ in () } 39 | 40 | defaults = defaults 41 | |> takeUntil(hasBeenEdited) 42 | } 43 | 44 | _committedValue <~ defaults 45 | } 46 | 47 | /// Initializes an editable property with the given default value. 48 | public convenience init(_ defaultValue: Value) { 49 | self.init(defaultValue: ConstantProperty(defaultValue), editsTakePriority: true) 50 | } 51 | 52 | deinit { 53 | sendCompleted(validationErrorsSink) 54 | } 55 | } 56 | 57 | extension EditableProperty: MutablePropertyType { 58 | public var value: Value { 59 | get { 60 | return _committedValue.value.value 61 | } 62 | 63 | set(value) { 64 | _committedValue.value = .ExplicitUpdate(Box(value)) 65 | } 66 | } 67 | 68 | public var producer: SignalProducer { 69 | return _committedValue.producer 70 | |> map { $0.value } 71 | } 72 | } 73 | 74 | extension EditableProperty: SinkType { 75 | public func put(value: Value) { 76 | self.value = value 77 | } 78 | } 79 | 80 | /// Attaches an Editor to an EditableProperty, so that any edits will be 81 | /// reflected in the property's value once editing has finished and validation 82 | /// has succeeded. 83 | /// 84 | /// If any error occurs during editing or validation, it will be sent along the 85 | /// property's `validationErrors` signal. 86 | /// 87 | /// The binding will automatically terminate when the property is deinitialized. 88 | /// 89 | /// Returns a disposable which can be used to manually remove the editor from the 90 | /// property. 91 | public func <~ (property: EditableProperty, editor: Editor) -> Disposable { 92 | let validatedEdits = editor.edits 93 | |> map(liftSignal) 94 | // We only care about the latest edit. 95 | |> flatMap(FlattenStrategy.Latest) { [weak property] editSession -> SignalProducer in 96 | let sessionCompleted: SignalProducer<(), NoError> = editSession 97 | |> then(.empty) 98 | |> catch { _ in .empty } 99 | 100 | let committedValues = (property?._committedValue.producer ?? .empty) 101 | |> promoteErrors(ValidationError.self) 102 | |> takeUntil(sessionCompleted) 103 | 104 | return combineLatest(committedValues, editSession) 105 | // We only care about the result of merging the latest values. 106 | |> flatMap(.Latest) { committed, proposed in 107 | return editor.mergeCommittedValue(committed, intoProposedValue: proposed) 108 | } 109 | // Wait until validation completes, then use the final value for 110 | // the property's value. If the signal never sends anything, 111 | // don't update the property. 112 | |> takeLast(1) 113 | // If interrupted or errored, just complete (to cancel the edit). 114 | |> ignoreInterruption 115 | |> catch { error in 116 | if let property = property { 117 | sendNext(property.validationErrorsSink, error) 118 | } 119 | 120 | return .empty 121 | } 122 | } 123 | |> map { Committed.ValidatedEdit(Box($0), editor) } 124 | 125 | return property._committedValue <~ validatedEdits 126 | } 127 | 128 | /// Lifts a Signal to a SignalProducer. 129 | /// 130 | /// This is a fundamentally unsafe operation, as no buffering is performed, and 131 | /// events may be missed. Use only in contexts where this is acceptable or 132 | /// impossible! 133 | private func liftSignal(signal: Signal) -> SignalProducer { 134 | return SignalProducer { observer, disposable in 135 | disposable.addDisposable(signal.observe(observer)) 136 | } 137 | } 138 | 139 | /// Ignores any Interrupted event on the input signal, translating it to 140 | /// Completed instead. 141 | private func ignoreInterruption(signal: Signal) -> Signal { 142 | return Signal { observer in 143 | return signal.observe(Signal.Observer { event in 144 | switch event { 145 | case .Interrupted: 146 | sendCompleted(observer) 147 | 148 | default: 149 | observer.put(event) 150 | } 151 | }) 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /EditableProperty.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | D00E598B1AF3FFA3000DAF8A /* Committed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E59891AF3FFA3000DAF8A /* Committed.swift */; }; 11 | D00E598C1AF3FFA3000DAF8A /* Editor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E598A1AF3FFA3000DAF8A /* Editor.swift */; }; 12 | D00E59901AF404E5000DAF8A /* EditablePropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E598F1AF404E5000DAF8A /* EditablePropertySpec.swift */; }; 13 | D00E59921AF406E3000DAF8A /* Quick.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D03A80EC1AF36C140047F5AE /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | D00E59931AF406E4000DAF8A /* Nimble.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D03A80EB1AF36C140047F5AE /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 15 | D03A80AB1AF36BD70047F5AE /* EditableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = D03A80AA1AF36BD70047F5AE /* EditableProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | D03A80B11AF36BD70047F5AE /* EditableProperty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03A80A51AF36BD70047F5AE /* EditableProperty.framework */; }; 17 | D03A80C21AF36BF10047F5AE /* EditableProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03A80C11AF36BF10047F5AE /* EditableProperty.swift */; }; 18 | D03A80ED1AF36C140047F5AE /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03A80EB1AF36C140047F5AE /* Nimble.framework */; }; 19 | D03A80EE1AF36C140047F5AE /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03A80EC1AF36C140047F5AE /* Quick.framework */; }; 20 | D8D608981B2FC9D00068D35B /* Box.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608961B2FC9D00068D35B /* Box.framework */; }; 21 | D8D608991B2FC9D00068D35B /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608971B2FC9D00068D35B /* Result.framework */; }; 22 | D8D6089B1B2FCA060068D35B /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D6089A1B2FCA060068D35B /* ReactiveCocoa.framework */; }; 23 | D8D6089C1B2FCA710068D35B /* Box.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608961B2FC9D00068D35B /* Box.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 24 | D8D6089D1B2FCA710068D35B /* ReactiveCocoa.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D8D6089A1B2FCA060068D35B /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 25 | D8D6089E1B2FCA710068D35B /* Result.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608971B2FC9D00068D35B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 26 | D8D608AF1B2FCB7F0068D35B /* EditableProperty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608A41B2FCB7E0068D35B /* EditableProperty.framework */; }; 27 | D8D608C41B2FCC510068D35B /* Box.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608C11B2FCC510068D35B /* Box.framework */; }; 28 | D8D608C51B2FCC510068D35B /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608C21B2FCC510068D35B /* ReactiveCocoa.framework */; }; 29 | D8D608C61B2FCC510068D35B /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608C31B2FCC510068D35B /* Result.framework */; }; 30 | D8D608C91B2FCCDF0068D35B /* EditableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = D03A80AA1AF36BD70047F5AE /* EditableProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; 31 | D8D608CA1B2FCCE50068D35B /* Committed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E59891AF3FFA3000DAF8A /* Committed.swift */; }; 32 | D8D608CB1B2FCCE50068D35B /* Editor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E598A1AF3FFA3000DAF8A /* Editor.swift */; }; 33 | D8D608CC1B2FCCE50068D35B /* EditableProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03A80C11AF36BF10047F5AE /* EditableProperty.swift */; }; 34 | D8D608CD1B2FCCF80068D35B /* Box.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608C11B2FCC510068D35B /* Box.framework */; }; 35 | D8D608CE1B2FCCF80068D35B /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608C21B2FCC510068D35B /* ReactiveCocoa.framework */; }; 36 | D8D608CF1B2FCCF80068D35B /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608C31B2FCC510068D35B /* Result.framework */; }; 37 | D8D608D01B2FCD020068D35B /* EditablePropertySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E598F1AF404E5000DAF8A /* EditablePropertySpec.swift */; }; 38 | D8D608D41B2FCD3B0068D35B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608D21B2FCD3B0068D35B /* Nimble.framework */; }; 39 | D8D608D51B2FCD3B0068D35B /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D608D31B2FCD3B0068D35B /* Quick.framework */; }; 40 | D8D608D81B2FCDA90068D35B /* Box.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8D608C11B2FCC510068D35B /* Box.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 41 | D8D608D91B2FCDA90068D35B /* ReactiveCocoa.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8D608C21B2FCC510068D35B /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 42 | D8D608DA1B2FCDA90068D35B /* Result.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8D608C31B2FCC510068D35B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 43 | D8D608DB1B2FCDA90068D35B /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8D608D21B2FCD3B0068D35B /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 44 | D8D608DC1B2FCDA90068D35B /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8D608D31B2FCD3B0068D35B /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 45 | /* End PBXBuildFile section */ 46 | 47 | /* Begin PBXContainerItemProxy section */ 48 | D03A80B21AF36BD70047F5AE /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = D03A809C1AF36BD70047F5AE /* Project object */; 51 | proxyType = 1; 52 | remoteGlobalIDString = D03A80A41AF36BD70047F5AE; 53 | remoteInfo = EditableProperty; 54 | }; 55 | D8D608B01B2FCB7F0068D35B /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = D03A809C1AF36BD70047F5AE /* Project object */; 58 | proxyType = 1; 59 | remoteGlobalIDString = D8D608A31B2FCB7E0068D35B; 60 | remoteInfo = "EditableProperty-iOS"; 61 | }; 62 | /* End PBXContainerItemProxy section */ 63 | 64 | /* Begin PBXCopyFilesBuildPhase section */ 65 | D00E59911AF406DA000DAF8A /* Copy Frameworks */ = { 66 | isa = PBXCopyFilesBuildPhase; 67 | buildActionMask = 2147483647; 68 | dstPath = ""; 69 | dstSubfolderSpec = 10; 70 | files = ( 71 | D8D6089C1B2FCA710068D35B /* Box.framework in Copy Frameworks */, 72 | D8D6089D1B2FCA710068D35B /* ReactiveCocoa.framework in Copy Frameworks */, 73 | D8D6089E1B2FCA710068D35B /* Result.framework in Copy Frameworks */, 74 | D00E59921AF406E3000DAF8A /* Quick.framework in Copy Frameworks */, 75 | D00E59931AF406E4000DAF8A /* Nimble.framework in Copy Frameworks */, 76 | ); 77 | name = "Copy Frameworks"; 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | D8D608D71B2FCD910068D35B /* CopyFiles */ = { 81 | isa = PBXCopyFilesBuildPhase; 82 | buildActionMask = 2147483647; 83 | dstPath = ""; 84 | dstSubfolderSpec = 10; 85 | files = ( 86 | D8D608D81B2FCDA90068D35B /* Box.framework in CopyFiles */, 87 | D8D608D91B2FCDA90068D35B /* ReactiveCocoa.framework in CopyFiles */, 88 | D8D608DA1B2FCDA90068D35B /* Result.framework in CopyFiles */, 89 | D8D608DB1B2FCDA90068D35B /* Nimble.framework in CopyFiles */, 90 | D8D608DC1B2FCDA90068D35B /* Quick.framework in CopyFiles */, 91 | ); 92 | runOnlyForDeploymentPostprocessing = 0; 93 | }; 94 | /* End PBXCopyFilesBuildPhase section */ 95 | 96 | /* Begin PBXFileReference section */ 97 | D00E59891AF3FFA3000DAF8A /* Committed.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Committed.swift; sourceTree = ""; }; 98 | D00E598A1AF3FFA3000DAF8A /* Editor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Editor.swift; sourceTree = ""; }; 99 | D00E598F1AF404E5000DAF8A /* EditablePropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditablePropertySpec.swift; sourceTree = ""; }; 100 | D03A80A51AF36BD70047F5AE /* EditableProperty.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EditableProperty.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 101 | D03A80A91AF36BD70047F5AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 102 | D03A80AA1AF36BD70047F5AE /* EditableProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditableProperty.h; sourceTree = ""; }; 103 | D03A80B01AF36BD70047F5AE /* EditablePropertyTests-Mac.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "EditablePropertyTests-Mac.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 104 | D03A80B61AF36BD70047F5AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 105 | D03A80C11AF36BF10047F5AE /* EditableProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditableProperty.swift; sourceTree = ""; }; 106 | D03A80C51AF36BFC0047F5AE /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; 107 | D03A80C71AF36BFC0047F5AE /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; 108 | D03A80C81AF36BFC0047F5AE /* Profile.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Profile.xcconfig; sourceTree = ""; }; 109 | D03A80C91AF36BFC0047F5AE /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 110 | D03A80CA1AF36BFC0047F5AE /* Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Test.xcconfig; sourceTree = ""; }; 111 | D03A80CC1AF36BFC0047F5AE /* Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Application.xcconfig; sourceTree = ""; }; 112 | D03A80CD1AF36BFC0047F5AE /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; 113 | D03A80CE1AF36BFC0047F5AE /* StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = StaticLibrary.xcconfig; sourceTree = ""; }; 114 | D03A80D21AF36BFC0047F5AE /* LlamaKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = LlamaKit.framework; sourceTree = ""; }; 115 | D03A80D31AF36BFC0047F5AE /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = ""; }; 116 | D03A80D41AF36BFC0047F5AE /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = ""; }; 117 | D03A80D51AF36BFC0047F5AE /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = ""; }; 118 | D03A80D71AF36BFC0047F5AE /* LlamaKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = LlamaKit.framework; sourceTree = ""; }; 119 | D03A80D81AF36BFC0047F5AE /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = ""; }; 120 | D03A80D91AF36BFC0047F5AE /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = ""; }; 121 | D03A80DA1AF36BFC0047F5AE /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = ""; }; 122 | D03A80DC1AF36BFC0047F5AE /* iOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Application.xcconfig"; sourceTree = ""; }; 123 | D03A80DD1AF36BFC0047F5AE /* iOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Base.xcconfig"; sourceTree = ""; }; 124 | D03A80DE1AF36BFC0047F5AE /* iOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Framework.xcconfig"; sourceTree = ""; }; 125 | D03A80DF1AF36BFC0047F5AE /* iOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-StaticLibrary.xcconfig"; sourceTree = ""; }; 126 | D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Application.xcconfig"; sourceTree = ""; }; 127 | D03A80E21AF36BFC0047F5AE /* Mac-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Base.xcconfig"; sourceTree = ""; }; 128 | D03A80E31AF36BFC0047F5AE /* Mac-DynamicLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-DynamicLibrary.xcconfig"; sourceTree = ""; }; 129 | D03A80E41AF36BFC0047F5AE /* Mac-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Framework.xcconfig"; sourceTree = ""; }; 130 | D03A80E51AF36BFC0047F5AE /* Mac-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-StaticLibrary.xcconfig"; sourceTree = ""; }; 131 | D03A80E61AF36BFC0047F5AE /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 132 | D03A80EB1AF36C140047F5AE /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/Mac/Nimble.framework; sourceTree = SOURCE_ROOT; }; 133 | D03A80EC1AF36C140047F5AE /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/Mac/Quick.framework; sourceTree = SOURCE_ROOT; }; 134 | D8D608961B2FC9D00068D35B /* Box.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Box.framework; path = Carthage/Build/Mac/Box.framework; sourceTree = SOURCE_ROOT; }; 135 | D8D608971B2FC9D00068D35B /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Result.framework; path = Carthage/Build/Mac/Result.framework; sourceTree = SOURCE_ROOT; }; 136 | D8D6089A1B2FCA060068D35B /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveCocoa.framework; path = Carthage/Build/Mac/ReactiveCocoa.framework; sourceTree = SOURCE_ROOT; }; 137 | D8D608A41B2FCB7E0068D35B /* EditableProperty.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EditableProperty.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 138 | D8D608AE1B2FCB7F0068D35B /* EditablePropertyTest-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "EditablePropertyTest-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 139 | D8D608C11B2FCC510068D35B /* Box.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Box.framework; path = Carthage/Build/iOS/Box.framework; sourceTree = SOURCE_ROOT; }; 140 | D8D608C21B2FCC510068D35B /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveCocoa.framework; path = Carthage/Build/iOS/ReactiveCocoa.framework; sourceTree = SOURCE_ROOT; }; 141 | D8D608C31B2FCC510068D35B /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Result.framework; path = Carthage/Build/iOS/Result.framework; sourceTree = SOURCE_ROOT; }; 142 | D8D608D21B2FCD3B0068D35B /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = SOURCE_ROOT; }; 143 | D8D608D31B2FCD3B0068D35B /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/iOS/Quick.framework; sourceTree = SOURCE_ROOT; }; 144 | /* End PBXFileReference section */ 145 | 146 | /* Begin PBXFrameworksBuildPhase section */ 147 | D03A80A11AF36BD70047F5AE /* Frameworks */ = { 148 | isa = PBXFrameworksBuildPhase; 149 | buildActionMask = 2147483647; 150 | files = ( 151 | D8D608981B2FC9D00068D35B /* Box.framework in Frameworks */, 152 | D8D6089B1B2FCA060068D35B /* ReactiveCocoa.framework in Frameworks */, 153 | D8D608991B2FC9D00068D35B /* Result.framework in Frameworks */, 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | D03A80AD1AF36BD70047F5AE /* Frameworks */ = { 158 | isa = PBXFrameworksBuildPhase; 159 | buildActionMask = 2147483647; 160 | files = ( 161 | D03A80B11AF36BD70047F5AE /* EditableProperty.framework in Frameworks */, 162 | D03A80ED1AF36C140047F5AE /* Nimble.framework in Frameworks */, 163 | D03A80EE1AF36C140047F5AE /* Quick.framework in Frameworks */, 164 | ); 165 | runOnlyForDeploymentPostprocessing = 0; 166 | }; 167 | D8D608A01B2FCB7E0068D35B /* Frameworks */ = { 168 | isa = PBXFrameworksBuildPhase; 169 | buildActionMask = 2147483647; 170 | files = ( 171 | D8D608C41B2FCC510068D35B /* Box.framework in Frameworks */, 172 | D8D608C51B2FCC510068D35B /* ReactiveCocoa.framework in Frameworks */, 173 | D8D608C61B2FCC510068D35B /* Result.framework in Frameworks */, 174 | ); 175 | runOnlyForDeploymentPostprocessing = 0; 176 | }; 177 | D8D608AB1B2FCB7F0068D35B /* Frameworks */ = { 178 | isa = PBXFrameworksBuildPhase; 179 | buildActionMask = 2147483647; 180 | files = ( 181 | D8D608D41B2FCD3B0068D35B /* Nimble.framework in Frameworks */, 182 | D8D608CD1B2FCCF80068D35B /* Box.framework in Frameworks */, 183 | D8D608D51B2FCD3B0068D35B /* Quick.framework in Frameworks */, 184 | D8D608CE1B2FCCF80068D35B /* ReactiveCocoa.framework in Frameworks */, 185 | D8D608AF1B2FCB7F0068D35B /* EditableProperty.framework in Frameworks */, 186 | D8D608CF1B2FCCF80068D35B /* Result.framework in Frameworks */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXFrameworksBuildPhase section */ 191 | 192 | /* Begin PBXGroup section */ 193 | D00E598D1AF404B4000DAF8A /* API */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | D00E59891AF3FFA3000DAF8A /* Committed.swift */, 197 | D00E598A1AF3FFA3000DAF8A /* Editor.swift */, 198 | D03A80C11AF36BF10047F5AE /* EditableProperty.swift */, 199 | ); 200 | name = API; 201 | sourceTree = ""; 202 | }; 203 | D00E598E1AF404C6000DAF8A /* Specs */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | D00E598F1AF404E5000DAF8A /* EditablePropertySpec.swift */, 207 | ); 208 | name = Specs; 209 | sourceTree = ""; 210 | }; 211 | D03A809B1AF36BD70047F5AE = { 212 | isa = PBXGroup; 213 | children = ( 214 | D03A80A71AF36BD70047F5AE /* EditableProperty */, 215 | D03A80B41AF36BD70047F5AE /* EditablePropertyTests */, 216 | D03A80C31AF36BFC0047F5AE /* Configuration */, 217 | D03A80A61AF36BD70047F5AE /* Products */, 218 | ); 219 | sourceTree = ""; 220 | }; 221 | D03A80A61AF36BD70047F5AE /* Products */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | D03A80A51AF36BD70047F5AE /* EditableProperty.framework */, 225 | D03A80B01AF36BD70047F5AE /* EditablePropertyTests-Mac.xctest */, 226 | D8D608A41B2FCB7E0068D35B /* EditableProperty.framework */, 227 | D8D608AE1B2FCB7F0068D35B /* EditablePropertyTest-iOS.xctest */, 228 | ); 229 | name = Products; 230 | sourceTree = ""; 231 | }; 232 | D03A80A71AF36BD70047F5AE /* EditableProperty */ = { 233 | isa = PBXGroup; 234 | children = ( 235 | D03A80AA1AF36BD70047F5AE /* EditableProperty.h */, 236 | D00E598D1AF404B4000DAF8A /* API */, 237 | D03A80A81AF36BD70047F5AE /* Supporting Files */, 238 | ); 239 | path = EditableProperty; 240 | sourceTree = ""; 241 | }; 242 | D03A80A81AF36BD70047F5AE /* Supporting Files */ = { 243 | isa = PBXGroup; 244 | children = ( 245 | D03A80A91AF36BD70047F5AE /* Info.plist */, 246 | D8D608C81B2FCC740068D35B /* iOS */, 247 | D8D608C71B2FCC5A0068D35B /* Mac */, 248 | ); 249 | name = "Supporting Files"; 250 | sourceTree = ""; 251 | }; 252 | D03A80B41AF36BD70047F5AE /* EditablePropertyTests */ = { 253 | isa = PBXGroup; 254 | children = ( 255 | D00E598E1AF404C6000DAF8A /* Specs */, 256 | D03A80B51AF36BD70047F5AE /* Supporting Files */, 257 | ); 258 | path = EditablePropertyTests; 259 | sourceTree = ""; 260 | }; 261 | D03A80B51AF36BD70047F5AE /* Supporting Files */ = { 262 | isa = PBXGroup; 263 | children = ( 264 | D03A80B61AF36BD70047F5AE /* Info.plist */, 265 | D8D608D61B2FCD400068D35B /* iOS */, 266 | D8D608D11B2FCD160068D35B /* Mac */, 267 | ); 268 | name = "Supporting Files"; 269 | sourceTree = ""; 270 | }; 271 | D03A80C31AF36BFC0047F5AE /* Configuration */ = { 272 | isa = PBXGroup; 273 | children = ( 274 | D03A80C41AF36BFC0047F5AE /* Base */, 275 | D03A80CF1AF36BFC0047F5AE /* Carthage */, 276 | D03A80DB1AF36BFC0047F5AE /* iOS */, 277 | D03A80E01AF36BFC0047F5AE /* Mac OS X */, 278 | D03A80E61AF36BFC0047F5AE /* README.md */, 279 | ); 280 | name = Configuration; 281 | path = Carthage/Checkouts/xcconfigs; 282 | sourceTree = ""; 283 | }; 284 | D03A80C41AF36BFC0047F5AE /* Base */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | D03A80C51AF36BFC0047F5AE /* Common.xcconfig */, 288 | D03A80C61AF36BFC0047F5AE /* Configurations */, 289 | D03A80CB1AF36BFC0047F5AE /* Targets */, 290 | ); 291 | path = Base; 292 | sourceTree = ""; 293 | }; 294 | D03A80C61AF36BFC0047F5AE /* Configurations */ = { 295 | isa = PBXGroup; 296 | children = ( 297 | D03A80C71AF36BFC0047F5AE /* Debug.xcconfig */, 298 | D03A80C81AF36BFC0047F5AE /* Profile.xcconfig */, 299 | D03A80C91AF36BFC0047F5AE /* Release.xcconfig */, 300 | D03A80CA1AF36BFC0047F5AE /* Test.xcconfig */, 301 | ); 302 | path = Configurations; 303 | sourceTree = ""; 304 | }; 305 | D03A80CB1AF36BFC0047F5AE /* Targets */ = { 306 | isa = PBXGroup; 307 | children = ( 308 | D03A80CC1AF36BFC0047F5AE /* Application.xcconfig */, 309 | D03A80CD1AF36BFC0047F5AE /* Framework.xcconfig */, 310 | D03A80CE1AF36BFC0047F5AE /* StaticLibrary.xcconfig */, 311 | ); 312 | path = Targets; 313 | sourceTree = ""; 314 | }; 315 | D03A80CF1AF36BFC0047F5AE /* Carthage */ = { 316 | isa = PBXGroup; 317 | children = ( 318 | D03A80D01AF36BFC0047F5AE /* Build */, 319 | ); 320 | path = Carthage; 321 | sourceTree = ""; 322 | }; 323 | D03A80D01AF36BFC0047F5AE /* Build */ = { 324 | isa = PBXGroup; 325 | children = ( 326 | D03A80D11AF36BFC0047F5AE /* iOS */, 327 | D03A80D61AF36BFC0047F5AE /* Mac */, 328 | ); 329 | path = Build; 330 | sourceTree = ""; 331 | }; 332 | D03A80D11AF36BFC0047F5AE /* iOS */ = { 333 | isa = PBXGroup; 334 | children = ( 335 | D03A80D21AF36BFC0047F5AE /* LlamaKit.framework */, 336 | D03A80D31AF36BFC0047F5AE /* Nimble.framework */, 337 | D03A80D41AF36BFC0047F5AE /* Quick.framework */, 338 | D03A80D51AF36BFC0047F5AE /* ReactiveCocoa.framework */, 339 | ); 340 | path = iOS; 341 | sourceTree = ""; 342 | }; 343 | D03A80D61AF36BFC0047F5AE /* Mac */ = { 344 | isa = PBXGroup; 345 | children = ( 346 | D03A80D71AF36BFC0047F5AE /* LlamaKit.framework */, 347 | D03A80D81AF36BFC0047F5AE /* Nimble.framework */, 348 | D03A80D91AF36BFC0047F5AE /* Quick.framework */, 349 | D03A80DA1AF36BFC0047F5AE /* ReactiveCocoa.framework */, 350 | ); 351 | path = Mac; 352 | sourceTree = ""; 353 | }; 354 | D03A80DB1AF36BFC0047F5AE /* iOS */ = { 355 | isa = PBXGroup; 356 | children = ( 357 | D03A80DC1AF36BFC0047F5AE /* iOS-Application.xcconfig */, 358 | D03A80DD1AF36BFC0047F5AE /* iOS-Base.xcconfig */, 359 | D03A80DE1AF36BFC0047F5AE /* iOS-Framework.xcconfig */, 360 | D03A80DF1AF36BFC0047F5AE /* iOS-StaticLibrary.xcconfig */, 361 | ); 362 | path = iOS; 363 | sourceTree = ""; 364 | }; 365 | D03A80E01AF36BFC0047F5AE /* Mac OS X */ = { 366 | isa = PBXGroup; 367 | children = ( 368 | D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */, 369 | D03A80E21AF36BFC0047F5AE /* Mac-Base.xcconfig */, 370 | D03A80E31AF36BFC0047F5AE /* Mac-DynamicLibrary.xcconfig */, 371 | D03A80E41AF36BFC0047F5AE /* Mac-Framework.xcconfig */, 372 | D03A80E51AF36BFC0047F5AE /* Mac-StaticLibrary.xcconfig */, 373 | ); 374 | path = "Mac OS X"; 375 | sourceTree = ""; 376 | }; 377 | D8D608C71B2FCC5A0068D35B /* Mac */ = { 378 | isa = PBXGroup; 379 | children = ( 380 | D8D608961B2FC9D00068D35B /* Box.framework */, 381 | D8D6089A1B2FCA060068D35B /* ReactiveCocoa.framework */, 382 | D8D608971B2FC9D00068D35B /* Result.framework */, 383 | ); 384 | name = Mac; 385 | sourceTree = ""; 386 | }; 387 | D8D608C81B2FCC740068D35B /* iOS */ = { 388 | isa = PBXGroup; 389 | children = ( 390 | D8D608C11B2FCC510068D35B /* Box.framework */, 391 | D8D608C21B2FCC510068D35B /* ReactiveCocoa.framework */, 392 | D8D608C31B2FCC510068D35B /* Result.framework */, 393 | ); 394 | name = iOS; 395 | sourceTree = ""; 396 | }; 397 | D8D608D11B2FCD160068D35B /* Mac */ = { 398 | isa = PBXGroup; 399 | children = ( 400 | D03A80EB1AF36C140047F5AE /* Nimble.framework */, 401 | D03A80EC1AF36C140047F5AE /* Quick.framework */, 402 | ); 403 | name = Mac; 404 | sourceTree = ""; 405 | }; 406 | D8D608D61B2FCD400068D35B /* iOS */ = { 407 | isa = PBXGroup; 408 | children = ( 409 | D8D608D21B2FCD3B0068D35B /* Nimble.framework */, 410 | D8D608D31B2FCD3B0068D35B /* Quick.framework */, 411 | ); 412 | name = iOS; 413 | sourceTree = ""; 414 | }; 415 | /* End PBXGroup section */ 416 | 417 | /* Begin PBXHeadersBuildPhase section */ 418 | D03A80A21AF36BD70047F5AE /* Headers */ = { 419 | isa = PBXHeadersBuildPhase; 420 | buildActionMask = 2147483647; 421 | files = ( 422 | D03A80AB1AF36BD70047F5AE /* EditableProperty.h in Headers */, 423 | ); 424 | runOnlyForDeploymentPostprocessing = 0; 425 | }; 426 | D8D608A11B2FCB7E0068D35B /* Headers */ = { 427 | isa = PBXHeadersBuildPhase; 428 | buildActionMask = 2147483647; 429 | files = ( 430 | D8D608C91B2FCCDF0068D35B /* EditableProperty.h in Headers */, 431 | ); 432 | runOnlyForDeploymentPostprocessing = 0; 433 | }; 434 | /* End PBXHeadersBuildPhase section */ 435 | 436 | /* Begin PBXNativeTarget section */ 437 | D03A80A41AF36BD70047F5AE /* EditableProperty-Mac */ = { 438 | isa = PBXNativeTarget; 439 | buildConfigurationList = D03A80BB1AF36BD70047F5AE /* Build configuration list for PBXNativeTarget "EditableProperty-Mac" */; 440 | buildPhases = ( 441 | D03A80A01AF36BD70047F5AE /* Sources */, 442 | D03A80A11AF36BD70047F5AE /* Frameworks */, 443 | D03A80A21AF36BD70047F5AE /* Headers */, 444 | D03A80A31AF36BD70047F5AE /* Resources */, 445 | ); 446 | buildRules = ( 447 | ); 448 | dependencies = ( 449 | ); 450 | name = "EditableProperty-Mac"; 451 | productName = EditableProperty; 452 | productReference = D03A80A51AF36BD70047F5AE /* EditableProperty.framework */; 453 | productType = "com.apple.product-type.framework"; 454 | }; 455 | D03A80AF1AF36BD70047F5AE /* EditablePropertyTests-Mac */ = { 456 | isa = PBXNativeTarget; 457 | buildConfigurationList = D03A80BE1AF36BD70047F5AE /* Build configuration list for PBXNativeTarget "EditablePropertyTests-Mac" */; 458 | buildPhases = ( 459 | D03A80AC1AF36BD70047F5AE /* Sources */, 460 | D03A80AD1AF36BD70047F5AE /* Frameworks */, 461 | D03A80AE1AF36BD70047F5AE /* Resources */, 462 | D00E59911AF406DA000DAF8A /* Copy Frameworks */, 463 | ); 464 | buildRules = ( 465 | ); 466 | dependencies = ( 467 | D03A80B31AF36BD70047F5AE /* PBXTargetDependency */, 468 | ); 469 | name = "EditablePropertyTests-Mac"; 470 | productName = EditablePropertyTests; 471 | productReference = D03A80B01AF36BD70047F5AE /* EditablePropertyTests-Mac.xctest */; 472 | productType = "com.apple.product-type.bundle.unit-test"; 473 | }; 474 | D8D608A31B2FCB7E0068D35B /* EditableProperty-iOS */ = { 475 | isa = PBXNativeTarget; 476 | buildConfigurationList = D8D608B71B2FCB7F0068D35B /* Build configuration list for PBXNativeTarget "EditableProperty-iOS" */; 477 | buildPhases = ( 478 | D8D6089F1B2FCB7E0068D35B /* Sources */, 479 | D8D608A01B2FCB7E0068D35B /* Frameworks */, 480 | D8D608A11B2FCB7E0068D35B /* Headers */, 481 | D8D608A21B2FCB7E0068D35B /* Resources */, 482 | ); 483 | buildRules = ( 484 | ); 485 | dependencies = ( 486 | ); 487 | name = "EditableProperty-iOS"; 488 | productName = "EditableProperty-iOS"; 489 | productReference = D8D608A41B2FCB7E0068D35B /* EditableProperty.framework */; 490 | productType = "com.apple.product-type.framework"; 491 | }; 492 | D8D608AD1B2FCB7F0068D35B /* EditablePropertyTests-iOS */ = { 493 | isa = PBXNativeTarget; 494 | buildConfigurationList = D8D608BC1B2FCB7F0068D35B /* Build configuration list for PBXNativeTarget "EditablePropertyTests-iOS" */; 495 | buildPhases = ( 496 | D8D608AA1B2FCB7F0068D35B /* Sources */, 497 | D8D608AB1B2FCB7F0068D35B /* Frameworks */, 498 | D8D608AC1B2FCB7F0068D35B /* Resources */, 499 | D8D608D71B2FCD910068D35B /* CopyFiles */, 500 | ); 501 | buildRules = ( 502 | ); 503 | dependencies = ( 504 | D8D608B11B2FCB7F0068D35B /* PBXTargetDependency */, 505 | ); 506 | name = "EditablePropertyTests-iOS"; 507 | productName = "EditableProperty-iOSTests"; 508 | productReference = D8D608AE1B2FCB7F0068D35B /* EditablePropertyTest-iOS.xctest */; 509 | productType = "com.apple.product-type.bundle.unit-test"; 510 | }; 511 | /* End PBXNativeTarget section */ 512 | 513 | /* Begin PBXProject section */ 514 | D03A809C1AF36BD70047F5AE /* Project object */ = { 515 | isa = PBXProject; 516 | attributes = { 517 | LastUpgradeCheck = 0630; 518 | ORGANIZATIONNAME = ReactiveCocoa; 519 | TargetAttributes = { 520 | D03A80A41AF36BD70047F5AE = { 521 | CreatedOnToolsVersion = 6.3; 522 | }; 523 | D03A80AF1AF36BD70047F5AE = { 524 | CreatedOnToolsVersion = 6.3; 525 | }; 526 | D8D608A31B2FCB7E0068D35B = { 527 | CreatedOnToolsVersion = 6.3.2; 528 | }; 529 | D8D608AD1B2FCB7F0068D35B = { 530 | CreatedOnToolsVersion = 6.3.2; 531 | }; 532 | }; 533 | }; 534 | buildConfigurationList = D03A809F1AF36BD70047F5AE /* Build configuration list for PBXProject "EditableProperty" */; 535 | compatibilityVersion = "Xcode 3.2"; 536 | developmentRegion = English; 537 | hasScannedForEncodings = 0; 538 | knownRegions = ( 539 | en, 540 | ); 541 | mainGroup = D03A809B1AF36BD70047F5AE; 542 | productRefGroup = D03A80A61AF36BD70047F5AE /* Products */; 543 | projectDirPath = ""; 544 | projectRoot = ""; 545 | targets = ( 546 | D03A80A41AF36BD70047F5AE /* EditableProperty-Mac */, 547 | D03A80AF1AF36BD70047F5AE /* EditablePropertyTests-Mac */, 548 | D8D608A31B2FCB7E0068D35B /* EditableProperty-iOS */, 549 | D8D608AD1B2FCB7F0068D35B /* EditablePropertyTests-iOS */, 550 | ); 551 | }; 552 | /* End PBXProject section */ 553 | 554 | /* Begin PBXResourcesBuildPhase section */ 555 | D03A80A31AF36BD70047F5AE /* Resources */ = { 556 | isa = PBXResourcesBuildPhase; 557 | buildActionMask = 2147483647; 558 | files = ( 559 | ); 560 | runOnlyForDeploymentPostprocessing = 0; 561 | }; 562 | D03A80AE1AF36BD70047F5AE /* Resources */ = { 563 | isa = PBXResourcesBuildPhase; 564 | buildActionMask = 2147483647; 565 | files = ( 566 | ); 567 | runOnlyForDeploymentPostprocessing = 0; 568 | }; 569 | D8D608A21B2FCB7E0068D35B /* Resources */ = { 570 | isa = PBXResourcesBuildPhase; 571 | buildActionMask = 2147483647; 572 | files = ( 573 | ); 574 | runOnlyForDeploymentPostprocessing = 0; 575 | }; 576 | D8D608AC1B2FCB7F0068D35B /* Resources */ = { 577 | isa = PBXResourcesBuildPhase; 578 | buildActionMask = 2147483647; 579 | files = ( 580 | ); 581 | runOnlyForDeploymentPostprocessing = 0; 582 | }; 583 | /* End PBXResourcesBuildPhase section */ 584 | 585 | /* Begin PBXSourcesBuildPhase section */ 586 | D03A80A01AF36BD70047F5AE /* Sources */ = { 587 | isa = PBXSourcesBuildPhase; 588 | buildActionMask = 2147483647; 589 | files = ( 590 | D00E598B1AF3FFA3000DAF8A /* Committed.swift in Sources */, 591 | D00E598C1AF3FFA3000DAF8A /* Editor.swift in Sources */, 592 | D03A80C21AF36BF10047F5AE /* EditableProperty.swift in Sources */, 593 | ); 594 | runOnlyForDeploymentPostprocessing = 0; 595 | }; 596 | D03A80AC1AF36BD70047F5AE /* Sources */ = { 597 | isa = PBXSourcesBuildPhase; 598 | buildActionMask = 2147483647; 599 | files = ( 600 | D00E59901AF404E5000DAF8A /* EditablePropertySpec.swift in Sources */, 601 | ); 602 | runOnlyForDeploymentPostprocessing = 0; 603 | }; 604 | D8D6089F1B2FCB7E0068D35B /* Sources */ = { 605 | isa = PBXSourcesBuildPhase; 606 | buildActionMask = 2147483647; 607 | files = ( 608 | D8D608CB1B2FCCE50068D35B /* Editor.swift in Sources */, 609 | D8D608CA1B2FCCE50068D35B /* Committed.swift in Sources */, 610 | D8D608CC1B2FCCE50068D35B /* EditableProperty.swift in Sources */, 611 | ); 612 | runOnlyForDeploymentPostprocessing = 0; 613 | }; 614 | D8D608AA1B2FCB7F0068D35B /* Sources */ = { 615 | isa = PBXSourcesBuildPhase; 616 | buildActionMask = 2147483647; 617 | files = ( 618 | D8D608D01B2FCD020068D35B /* EditablePropertySpec.swift in Sources */, 619 | ); 620 | runOnlyForDeploymentPostprocessing = 0; 621 | }; 622 | /* End PBXSourcesBuildPhase section */ 623 | 624 | /* Begin PBXTargetDependency section */ 625 | D03A80B31AF36BD70047F5AE /* PBXTargetDependency */ = { 626 | isa = PBXTargetDependency; 627 | target = D03A80A41AF36BD70047F5AE /* EditableProperty-Mac */; 628 | targetProxy = D03A80B21AF36BD70047F5AE /* PBXContainerItemProxy */; 629 | }; 630 | D8D608B11B2FCB7F0068D35B /* PBXTargetDependency */ = { 631 | isa = PBXTargetDependency; 632 | target = D8D608A31B2FCB7E0068D35B /* EditableProperty-iOS */; 633 | targetProxy = D8D608B01B2FCB7F0068D35B /* PBXContainerItemProxy */; 634 | }; 635 | /* End PBXTargetDependency section */ 636 | 637 | /* Begin XCBuildConfiguration section */ 638 | D03A80B91AF36BD70047F5AE /* Debug */ = { 639 | isa = XCBuildConfiguration; 640 | baseConfigurationReference = D03A80C71AF36BFC0047F5AE /* Debug.xcconfig */; 641 | buildSettings = { 642 | CURRENT_PROJECT_VERSION = 1; 643 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 644 | MACOSX_DEPLOYMENT_TARGET = 10.9; 645 | VERSIONING_SYSTEM = "apple-generic"; 646 | VERSION_INFO_PREFIX = ""; 647 | }; 648 | name = Debug; 649 | }; 650 | D03A80BA1AF36BD70047F5AE /* Release */ = { 651 | isa = XCBuildConfiguration; 652 | baseConfigurationReference = D03A80C91AF36BFC0047F5AE /* Release.xcconfig */; 653 | buildSettings = { 654 | CURRENT_PROJECT_VERSION = 1; 655 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 656 | MACOSX_DEPLOYMENT_TARGET = 10.9; 657 | VERSIONING_SYSTEM = "apple-generic"; 658 | VERSION_INFO_PREFIX = ""; 659 | }; 660 | name = Release; 661 | }; 662 | D03A80BC1AF36BD70047F5AE /* Debug */ = { 663 | isa = XCBuildConfiguration; 664 | baseConfigurationReference = D03A80E41AF36BFC0047F5AE /* Mac-Framework.xcconfig */; 665 | buildSettings = { 666 | DYLIB_COMPATIBILITY_VERSION = 1; 667 | DYLIB_CURRENT_VERSION = 1; 668 | FRAMEWORK_SEARCH_PATHS = ( 669 | "$(inherited)", 670 | Carthage/Build/Mac, 671 | "$(PROJECT_DIR)/Carthage/Build/Mac", 672 | ); 673 | FRAMEWORK_VERSION = A; 674 | INFOPLIST_FILE = EditableProperty/Info.plist; 675 | PRODUCT_NAME = "$(PROJECT_NAME)"; 676 | }; 677 | name = Debug; 678 | }; 679 | D03A80BD1AF36BD70047F5AE /* Release */ = { 680 | isa = XCBuildConfiguration; 681 | baseConfigurationReference = D03A80E41AF36BFC0047F5AE /* Mac-Framework.xcconfig */; 682 | buildSettings = { 683 | DYLIB_COMPATIBILITY_VERSION = 1; 684 | DYLIB_CURRENT_VERSION = 1; 685 | FRAMEWORK_SEARCH_PATHS = ( 686 | "$(inherited)", 687 | Carthage/Build/Mac, 688 | "$(PROJECT_DIR)/Carthage/Build/Mac", 689 | ); 690 | FRAMEWORK_VERSION = A; 691 | INFOPLIST_FILE = EditableProperty/Info.plist; 692 | PRODUCT_NAME = "$(PROJECT_NAME)"; 693 | }; 694 | name = Release; 695 | }; 696 | D03A80BF1AF36BD70047F5AE /* Debug */ = { 697 | isa = XCBuildConfiguration; 698 | baseConfigurationReference = D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */; 699 | buildSettings = { 700 | CLANG_ENABLE_MODULES = YES; 701 | FRAMEWORK_SEARCH_PATHS = ( 702 | "$(DEVELOPER_FRAMEWORKS_DIR)", 703 | "$(inherited)", 704 | Carthage/Build/Mac, 705 | ); 706 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 707 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 708 | PRODUCT_NAME = "$(TARGET_NAME)"; 709 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 710 | }; 711 | name = Debug; 712 | }; 713 | D03A80C01AF36BD70047F5AE /* Release */ = { 714 | isa = XCBuildConfiguration; 715 | baseConfigurationReference = D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */; 716 | buildSettings = { 717 | CLANG_ENABLE_MODULES = YES; 718 | FRAMEWORK_SEARCH_PATHS = ( 719 | "$(DEVELOPER_FRAMEWORKS_DIR)", 720 | "$(inherited)", 721 | Carthage/Build/Mac, 722 | ); 723 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 724 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 725 | PRODUCT_NAME = "$(TARGET_NAME)"; 726 | }; 727 | name = Release; 728 | }; 729 | D03A80EF1AF36C2D0047F5AE /* Profile */ = { 730 | isa = XCBuildConfiguration; 731 | baseConfigurationReference = D03A80C81AF36BFC0047F5AE /* Profile.xcconfig */; 732 | buildSettings = { 733 | CURRENT_PROJECT_VERSION = 1; 734 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 735 | MACOSX_DEPLOYMENT_TARGET = 10.9; 736 | VERSIONING_SYSTEM = "apple-generic"; 737 | VERSION_INFO_PREFIX = ""; 738 | }; 739 | name = Profile; 740 | }; 741 | D03A80F01AF36C2D0047F5AE /* Profile */ = { 742 | isa = XCBuildConfiguration; 743 | baseConfigurationReference = D03A80E41AF36BFC0047F5AE /* Mac-Framework.xcconfig */; 744 | buildSettings = { 745 | DYLIB_COMPATIBILITY_VERSION = 1; 746 | DYLIB_CURRENT_VERSION = 1; 747 | FRAMEWORK_SEARCH_PATHS = ( 748 | "$(inherited)", 749 | Carthage/Build/Mac, 750 | "$(PROJECT_DIR)/Carthage/Build/Mac", 751 | ); 752 | FRAMEWORK_VERSION = A; 753 | INFOPLIST_FILE = EditableProperty/Info.plist; 754 | PRODUCT_NAME = "$(PROJECT_NAME)"; 755 | }; 756 | name = Profile; 757 | }; 758 | D03A80F11AF36C2D0047F5AE /* Profile */ = { 759 | isa = XCBuildConfiguration; 760 | baseConfigurationReference = D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */; 761 | buildSettings = { 762 | CLANG_ENABLE_MODULES = YES; 763 | FRAMEWORK_SEARCH_PATHS = ( 764 | "$(DEVELOPER_FRAMEWORKS_DIR)", 765 | "$(inherited)", 766 | Carthage/Build/Mac, 767 | ); 768 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 769 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 770 | PRODUCT_NAME = "$(TARGET_NAME)"; 771 | }; 772 | name = Profile; 773 | }; 774 | D03A80F21AF36C310047F5AE /* Test */ = { 775 | isa = XCBuildConfiguration; 776 | baseConfigurationReference = D03A80CA1AF36BFC0047F5AE /* Test.xcconfig */; 777 | buildSettings = { 778 | CURRENT_PROJECT_VERSION = 1; 779 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 780 | MACOSX_DEPLOYMENT_TARGET = 10.9; 781 | VERSIONING_SYSTEM = "apple-generic"; 782 | VERSION_INFO_PREFIX = ""; 783 | }; 784 | name = Test; 785 | }; 786 | D03A80F31AF36C310047F5AE /* Test */ = { 787 | isa = XCBuildConfiguration; 788 | baseConfigurationReference = D03A80E41AF36BFC0047F5AE /* Mac-Framework.xcconfig */; 789 | buildSettings = { 790 | DYLIB_COMPATIBILITY_VERSION = 1; 791 | DYLIB_CURRENT_VERSION = 1; 792 | FRAMEWORK_SEARCH_PATHS = ( 793 | "$(inherited)", 794 | Carthage/Build/Mac, 795 | "$(PROJECT_DIR)/Carthage/Build/Mac", 796 | ); 797 | FRAMEWORK_VERSION = A; 798 | INFOPLIST_FILE = EditableProperty/Info.plist; 799 | PRODUCT_NAME = "$(PROJECT_NAME)"; 800 | }; 801 | name = Test; 802 | }; 803 | D03A80F41AF36C310047F5AE /* Test */ = { 804 | isa = XCBuildConfiguration; 805 | baseConfigurationReference = D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */; 806 | buildSettings = { 807 | CLANG_ENABLE_MODULES = YES; 808 | FRAMEWORK_SEARCH_PATHS = ( 809 | "$(DEVELOPER_FRAMEWORKS_DIR)", 810 | "$(inherited)", 811 | Carthage/Build/Mac, 812 | ); 813 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 814 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 815 | PRODUCT_NAME = "$(TARGET_NAME)"; 816 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 817 | }; 818 | name = Test; 819 | }; 820 | D8D608B81B2FCB7F0068D35B /* Debug */ = { 821 | isa = XCBuildConfiguration; 822 | baseConfigurationReference = D03A80DE1AF36BFC0047F5AE /* iOS-Framework.xcconfig */; 823 | buildSettings = { 824 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 825 | DYLIB_COMPATIBILITY_VERSION = 1; 826 | DYLIB_CURRENT_VERSION = 1; 827 | FRAMEWORK_SEARCH_PATHS = ( 828 | "$(inherited)", 829 | "$(PROJECT_DIR)/Carthage/Build/iOS", 830 | ); 831 | INFOPLIST_FILE = "$(SRCROOT)/EditableProperty/Info.plist"; 832 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 833 | PRODUCT_NAME = "$(PROJECT_NAME)"; 834 | }; 835 | name = Debug; 836 | }; 837 | D8D608B91B2FCB7F0068D35B /* Test */ = { 838 | isa = XCBuildConfiguration; 839 | baseConfigurationReference = D03A80DE1AF36BFC0047F5AE /* iOS-Framework.xcconfig */; 840 | buildSettings = { 841 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 842 | DYLIB_COMPATIBILITY_VERSION = 1; 843 | DYLIB_CURRENT_VERSION = 1; 844 | FRAMEWORK_SEARCH_PATHS = ( 845 | "$(inherited)", 846 | "$(PROJECT_DIR)/Carthage/Build/iOS", 847 | ); 848 | INFOPLIST_FILE = "$(SRCROOT)/EditableProperty/Info.plist"; 849 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 850 | PRODUCT_NAME = "$(PROJECT_NAME)"; 851 | }; 852 | name = Test; 853 | }; 854 | D8D608BA1B2FCB7F0068D35B /* Release */ = { 855 | isa = XCBuildConfiguration; 856 | baseConfigurationReference = D03A80DE1AF36BFC0047F5AE /* iOS-Framework.xcconfig */; 857 | buildSettings = { 858 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 859 | DYLIB_COMPATIBILITY_VERSION = 1; 860 | DYLIB_CURRENT_VERSION = 1; 861 | FRAMEWORK_SEARCH_PATHS = ( 862 | "$(inherited)", 863 | "$(PROJECT_DIR)/Carthage/Build/iOS", 864 | ); 865 | INFOPLIST_FILE = "$(SRCROOT)/EditableProperty/Info.plist"; 866 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 867 | PRODUCT_NAME = "$(PROJECT_NAME)"; 868 | }; 869 | name = Release; 870 | }; 871 | D8D608BB1B2FCB7F0068D35B /* Profile */ = { 872 | isa = XCBuildConfiguration; 873 | baseConfigurationReference = D03A80DE1AF36BFC0047F5AE /* iOS-Framework.xcconfig */; 874 | buildSettings = { 875 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 876 | DYLIB_COMPATIBILITY_VERSION = 1; 877 | DYLIB_CURRENT_VERSION = 1; 878 | FRAMEWORK_SEARCH_PATHS = ( 879 | "$(inherited)", 880 | "$(PROJECT_DIR)/Carthage/Build/iOS", 881 | ); 882 | INFOPLIST_FILE = "$(SRCROOT)/EditableProperty/Info.plist"; 883 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 884 | PRODUCT_NAME = "$(PROJECT_NAME)"; 885 | }; 886 | name = Profile; 887 | }; 888 | D8D608BD1B2FCB7F0068D35B /* Debug */ = { 889 | isa = XCBuildConfiguration; 890 | baseConfigurationReference = D03A80DC1AF36BFC0047F5AE /* iOS-Application.xcconfig */; 891 | buildSettings = { 892 | FRAMEWORK_SEARCH_PATHS = ( 893 | "$(SDKROOT)/Developer/Library/Frameworks", 894 | "$(inherited)", 895 | "$(PROJECT_DIR)/Carthage/Build/iOS", 896 | ); 897 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 898 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 899 | PRODUCT_NAME = "$(TARGET_NAME)"; 900 | }; 901 | name = Debug; 902 | }; 903 | D8D608BE1B2FCB7F0068D35B /* Test */ = { 904 | isa = XCBuildConfiguration; 905 | baseConfigurationReference = D03A80DC1AF36BFC0047F5AE /* iOS-Application.xcconfig */; 906 | buildSettings = { 907 | FRAMEWORK_SEARCH_PATHS = ( 908 | "$(SDKROOT)/Developer/Library/Frameworks", 909 | "$(inherited)", 910 | "$(PROJECT_DIR)/Carthage/Build/iOS", 911 | ); 912 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 913 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 914 | PRODUCT_NAME = "$(TARGET_NAME)"; 915 | }; 916 | name = Test; 917 | }; 918 | D8D608BF1B2FCB7F0068D35B /* Release */ = { 919 | isa = XCBuildConfiguration; 920 | baseConfigurationReference = D03A80DC1AF36BFC0047F5AE /* iOS-Application.xcconfig */; 921 | buildSettings = { 922 | FRAMEWORK_SEARCH_PATHS = ( 923 | "$(SDKROOT)/Developer/Library/Frameworks", 924 | "$(inherited)", 925 | "$(PROJECT_DIR)/Carthage/Build/iOS", 926 | ); 927 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 928 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 929 | PRODUCT_NAME = "$(TARGET_NAME)"; 930 | }; 931 | name = Release; 932 | }; 933 | D8D608C01B2FCB7F0068D35B /* Profile */ = { 934 | isa = XCBuildConfiguration; 935 | baseConfigurationReference = D03A80E11AF36BFC0047F5AE /* Mac-Application.xcconfig */; 936 | buildSettings = { 937 | FRAMEWORK_SEARCH_PATHS = ( 938 | "$(SDKROOT)/Developer/Library/Frameworks", 939 | "$(inherited)", 940 | "$(PROJECT_DIR)/Carthage/Build/iOS", 941 | ); 942 | INFOPLIST_FILE = EditablePropertyTests/Info.plist; 943 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 944 | PRODUCT_NAME = "$(TARGET_NAME)"; 945 | }; 946 | name = Profile; 947 | }; 948 | /* End XCBuildConfiguration section */ 949 | 950 | /* Begin XCConfigurationList section */ 951 | D03A809F1AF36BD70047F5AE /* Build configuration list for PBXProject "EditableProperty" */ = { 952 | isa = XCConfigurationList; 953 | buildConfigurations = ( 954 | D03A80B91AF36BD70047F5AE /* Debug */, 955 | D03A80F21AF36C310047F5AE /* Test */, 956 | D03A80BA1AF36BD70047F5AE /* Release */, 957 | D03A80EF1AF36C2D0047F5AE /* Profile */, 958 | ); 959 | defaultConfigurationIsVisible = 0; 960 | defaultConfigurationName = Release; 961 | }; 962 | D03A80BB1AF36BD70047F5AE /* Build configuration list for PBXNativeTarget "EditableProperty-Mac" */ = { 963 | isa = XCConfigurationList; 964 | buildConfigurations = ( 965 | D03A80BC1AF36BD70047F5AE /* Debug */, 966 | D03A80F31AF36C310047F5AE /* Test */, 967 | D03A80BD1AF36BD70047F5AE /* Release */, 968 | D03A80F01AF36C2D0047F5AE /* Profile */, 969 | ); 970 | defaultConfigurationIsVisible = 0; 971 | defaultConfigurationName = Release; 972 | }; 973 | D03A80BE1AF36BD70047F5AE /* Build configuration list for PBXNativeTarget "EditablePropertyTests-Mac" */ = { 974 | isa = XCConfigurationList; 975 | buildConfigurations = ( 976 | D03A80BF1AF36BD70047F5AE /* Debug */, 977 | D03A80F41AF36C310047F5AE /* Test */, 978 | D03A80C01AF36BD70047F5AE /* Release */, 979 | D03A80F11AF36C2D0047F5AE /* Profile */, 980 | ); 981 | defaultConfigurationIsVisible = 0; 982 | defaultConfigurationName = Release; 983 | }; 984 | D8D608B71B2FCB7F0068D35B /* Build configuration list for PBXNativeTarget "EditableProperty-iOS" */ = { 985 | isa = XCConfigurationList; 986 | buildConfigurations = ( 987 | D8D608B81B2FCB7F0068D35B /* Debug */, 988 | D8D608B91B2FCB7F0068D35B /* Test */, 989 | D8D608BA1B2FCB7F0068D35B /* Release */, 990 | D8D608BB1B2FCB7F0068D35B /* Profile */, 991 | ); 992 | defaultConfigurationIsVisible = 0; 993 | defaultConfigurationName = Release; 994 | }; 995 | D8D608BC1B2FCB7F0068D35B /* Build configuration list for PBXNativeTarget "EditablePropertyTests-iOS" */ = { 996 | isa = XCConfigurationList; 997 | buildConfigurations = ( 998 | D8D608BD1B2FCB7F0068D35B /* Debug */, 999 | D8D608BE1B2FCB7F0068D35B /* Test */, 1000 | D8D608BF1B2FCB7F0068D35B /* Release */, 1001 | D8D608C01B2FCB7F0068D35B /* Profile */, 1002 | ); 1003 | defaultConfigurationIsVisible = 0; 1004 | defaultConfigurationName = Release; 1005 | }; 1006 | /* End XCConfigurationList section */ 1007 | }; 1008 | rootObject = D03A809C1AF36BD70047F5AE /* Project object */; 1009 | } 1010 | --------------------------------------------------------------------------------