├── 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 |
--------------------------------------------------------------------------------