├── .gitignore
├── .gitmodules
├── Cartfile
├── Cartfile.resolved
├── README.markdown
├── ReactiveMarbles.playground
├── Pages
│ ├── Intro.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── combineLatest.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── concat.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── delay.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── filter.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── map.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── merge.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── sampleOn.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── skip.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── skipRepeats.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ ├── throttle.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
│ └── zip.xcplaygroundpage
│ │ ├── Contents.swift
│ │ └── timeline.xctimeline
├── contents.xcplayground
└── playground.xcworkspace
│ └── contents.xcworkspacedata
├── ReactiveMarbles.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── ReactiveMarbles.xcscmblueprint
└── ReactiveMarbles
├── ReactiveMarbles.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcshareddata
│ └── xcschemes
│ └── ReactiveMarbles-OSX.xcscheme
├── ReactiveMarbles
├── Info.plist
├── Marbles.swift
├── NSTimerExtensions.swift
├── PlaygroundSupport.swift
└── ReactiveMarbles.h
└── XCPlayground.framework
├── Modules
├── Resources
├── Versions
├── A
│ ├── Modules
│ │ └── XCPlayground.swiftmodule
│ │ │ ├── x86_64.swiftdoc
│ │ │ └── x86_64.swiftmodule
│ ├── Resources
│ │ ├── Info.plist
│ │ └── version.plist
│ ├── XCPlayground
│ └── _CodeSignature
│ │ └── CodeResources
└── Current
└── XCPlayground
/.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 | .DS_Store
20 |
21 | #Carthage
22 | Carthage/Build
23 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "Carthage/Checkouts/Result"]
2 | url = https://github.com/antitypical/Result.git
3 | path = Carthage/Checkouts/Result
4 | [submodule "Carthage/Checkouts/ReactiveCocoa"]
5 | path = Carthage/Checkouts/ReactiveCocoa
6 | url = https://github.com/ReactiveCocoa/ReactiveCocoa.git
7 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveCocoa/ReactiveCocoa" "swift2"
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "antitypical/Result" "0.6.0-beta.3"
2 | github "ReactiveCocoa/ReactiveCocoa" "50af8fec8d1825d65c81f13efee3bbfb808a1242"
3 |
--------------------------------------------------------------------------------
/README.markdown:
--------------------------------------------------------------------------------
1 | # ReactiveMarbles
2 |
3 | ## SpriteKit marble animations demonstrating [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa/tree/swift2) methods.
4 |
5 | [Marbles](http://rxmarbles.com) are a time-honoured method of teaching RX concepts. This repository includes a Swift 2 Playground with animated marble views to allow experimentation with ReactiveCocoa 4 signals.
6 |
7 | ### Getting Started:
8 |
9 | 1. Clone or download the repo
10 | 2. Run `carthage checkout`, or `git submodule init && git submodule update`
11 | 3. Open the workspace (not the playground!)
12 | 4. Build the 'ReactiveMarbles-OSX' scheme
13 | 5. Open one of the Playground pages, show the Assistant Editor (and choose 'Timeline' if necessary).
14 |
15 | ### TODO/Known Issues:
16 |
17 | * No iOS framework - iOS Playgrounds are limited to only one live view, which makes these somewhat less useful.
18 | * The private XCPlayground.framework is bundled in the repository. This may not work with different versions of Xcode (currently built for Xcode 7)
19 | * The frame rate is pretty awful on slower Macs.
20 |
21 | I’m also **not** a seasoned ReactiveCocoa expert, and some of this code may be incorrect/misleading/non-idiomatic/crap. I’d gratefully appreciate corrections and/or PRs. There’s probably also more work that can be done in the Playground support to make it a bit more useful & natural to experiment with.
22 |
23 | Licensed under the terms of the [ISC license](http://opensource.org/licenses/ISC).
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/Intro.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | /*:
2 | # ReactiveCocoa examples
3 | */
4 |
5 |
6 | import ReactiveCocoa
7 | import ReactiveMarbles
8 |
9 |
10 | let signal = marbleSignal()
11 | display("Marbles", signal, showValue: false)
12 |
13 | //: [Next](@next)
14 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/Intro.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/combineLatest.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `combineLatestWith()`
5 | //: Sends a tuple of the latest events from each `SignalProducer`.
6 | //: Operates on a `SignalProducer>`
7 |
8 | let source1 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
9 | let source2 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
10 | let combined = source1.combineLatestWith(source2)
11 | display("Source1", source1)
12 | display("Source2", source2)
13 | display("Combined", combined)
14 |
15 | //: [Previous](@previous) | [Next](@next)
16 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/combineLatest.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/concat.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `flatten(.Concat)`
5 | //: Returns a single event producer that sends all the events from the inner producers sequentially.
6 | //: (ie all events from the first producer, then all events from the second producer)
7 |
8 | let source1 = marbleSignalProducer(.Red, count: 5)
9 | let source2 = marbleSignalProducer(.Blue, count: 3)
10 | let aggregateProducer = SignalProducer, NoError>(values: [source1, source2])
11 | let flattened = aggregateProducer.flatten(.Concat)
12 | display("Source1", source1)
13 | display("Source2", source2)
14 | display("Flattened", flattened)
15 |
16 | //: [Previous](@previous) | [Next](@next)
17 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/concat.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/delay.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `delay()`
5 | //: Delays all events by a given interval
6 |
7 | let source = marbleSignalProducer(marbleSignal(colour: .Random))
8 | let delayed = source.delay(1.5.seconds, onScheduler:QueueScheduler.mainQueueScheduler)
9 | display("Source", source)
10 | display("Delayed", delayed)
11 |
12 | //: [Previous](@previous) | [Next](@next)
13 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/delay.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/filter.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `filter()`
5 | //: Filters events with a predicate
6 |
7 | let signal = marbleSignal(colour: .Random)
8 | let filtered = signal.filter { m in m.colour == .Purple }
9 | display("Signal", signal)
10 | display("Filtered", filtered)
11 |
12 | //: [Previous](@previous) | [Next](@next)
13 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/filter.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/map.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `map()`
5 | //: Transforms event values with a transform function
6 |
7 | let source = marbleSignalProducer(marbleSignal(colour: .Random))
8 | let doubled = source.map { m in Marble(colour: m.colour, value: m.value * 2) }
9 | display("Source", source)
10 | display("Doubled", doubled)
11 |
12 | //: [Previous](@previous) | [Next](@next)
13 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/map.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/merge.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `flatten(.Merge)`
5 | //: Returns a single event producer that sends all the events from the inner producers when they occur.
6 |
7 | let source1 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
8 | let source2 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
9 | let aggregateProducer = SignalProducer, NoError>(values: [source1, source2])
10 | let flattened = aggregateProducer.flatten(.Merge)
11 | display("Source1", source1)
12 | display("Source2", source2)
13 | display("Flattened", flattened)
14 |
15 | //: [Previous](@previous) | [Next](@next)
16 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/merge.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/sampleOn.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `sampleOn()`
5 | //: Sends the latest event from the source every time an event is sent on the trigger
6 | //: Useful for using timers to sample irregular data & turn it into a regular event.
7 |
8 | let source1 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
9 | let source2 = marbleSignalProducer(marbleSignal(colour: .Single(.Red)))
10 | let combined = source1.sampleOn(source2.map { _ in })
11 | display("Source1", source1)
12 | display("Source2", source2, showValue: false)
13 | display("Combined", combined, showValue: true)
14 |
15 | //: [Previous](@previous) | [Next](@next)
16 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/sampleOn.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/skip.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `skip()` & `take()`
5 | //: Skips or (or takes) as specified number of events
6 |
7 | let signal = marbleSignalProducer(marbleSignal(colour: .Random))
8 | let filtered = signal.skip(4)
9 | display("Signal", signal)
10 | display("Filtered", filtered)
11 |
12 | //: [Previous](@previous) | [Next](@next)
13 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/skip.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/skipRepeats.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `skipRepeats()`
5 | //: Removes (consecutive) duplicates based on equality test
6 |
7 | let source = marbleSignalProducer(marbleSignal(colour: .Random))
8 | let filtered = source.skipRepeats { a, b in a.colour == b.colour }
9 | display("Source", source)
10 | display("Filtered", filtered)
11 |
12 | //: [Previous](@previous) | [Next](@next)
13 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/skipRepeats.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/throttle.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `throttle()`
5 | //: Limits events to only one in a given interval
6 |
7 | let source = marbleSignalProducer(marbleSignal(colour: .Random))
8 | let throttled = source.throttle(3.seconds, onScheduler: QueueScheduler.mainQueueScheduler)
9 | display("Source", source)
10 | display("Throttled", throttled)
11 |
12 | //: [Previous](@previous) | [Next](@next)
13 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/throttle.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/zip.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | import ReactiveCocoa
2 | import ReactiveMarbles
3 |
4 | //: ## `zipWith()`
5 | //: Sends a tuple like `combineLatest`, but matches up events by sequence number
6 |
7 | let source1 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
8 | let source2 = marbleSignalProducer(irregularMarbleSignal(colour: .Random))
9 | let zipped = source1.zipWith(source2)
10 | display("Source1", source1)
11 | display("Source2", source2)
12 | display("Zipped", zipped)
13 |
14 | //: [Previous](@previous) | [Next](@next)
15 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/Pages/zip.xcplaygroundpage/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ReactiveMarbles.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ReactiveMarbles.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ReactiveMarbles.xcworkspace/xcshareddata/ReactiveMarbles.xcscmblueprint:
--------------------------------------------------------------------------------
1 | {
2 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
3 |
4 | },
5 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
6 | "51B210D0D41486D3ADD6940D57E4480BBD4DE4C5" : 0,
7 | "956D2B21DD155C49504BB67697A67F7C5351A353" : 0
8 | },
9 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "7AF4EBDB-6E09-4543-8DDB-09D3DD5E9B20",
10 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
11 | "51B210D0D41486D3ADD6940D57E4480BBD4DE4C5" : "ReactiveMarbles\/Carthage\/Checkouts\/ReactiveCocoa\/",
12 | "956D2B21DD155C49504BB67697A67F7C5351A353" : "ReactiveMarbles\/Carthage\/Checkouts\/Result\/"
13 | },
14 | "DVTSourceControlWorkspaceBlueprintNameKey" : "ReactiveMarbles",
15 | "DVTSourceControlWorkspaceBlueprintVersion" : 204,
16 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "ReactiveMarbles.xcworkspace",
17 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
18 | {
19 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/ReactiveCocoa\/ReactiveCocoa.git",
20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "51B210D0D41486D3ADD6940D57E4480BBD4DE4C5"
22 | },
23 | {
24 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/antitypical\/Result.git",
25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "956D2B21DD155C49504BB67697A67F7C5351A353"
27 | }
28 | ]
29 | }
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 225197971BB2D48C00DB634F /* XCPlayground.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 225197961BB2D48A00DB634F /* XCPlayground.framework */; settings = {ASSET_TAGS = (); }; };
11 | 2279ADC31BA91B3C00DA39CB /* PlaygroundSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2279ADC21BA91B3C00DA39CB /* PlaygroundSupport.swift */; settings = {ASSET_TAGS = (); }; };
12 | 22D4B28E1BA65F50000825FF /* Marbles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D4B2711BA3C030000825FF /* Marbles.swift */; };
13 | 22D4B2921BA65FAE000825FF /* ReactiveMarbles.h in Headers */ = {isa = PBXBuildFile; fileRef = 22D4B2901BA65FAE000825FF /* ReactiveMarbles.h */; settings = {ATTRIBUTES = (Public, ); }; };
14 | 22D4B2951BA673FE000825FF /* NSTimerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D4B2931BA673FE000825FF /* NSTimerExtensions.swift */; settings = {ASSET_TAGS = (); }; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXContainerItemProxy section */
18 | 225197A11BB2D80F00DB634F /* PBXContainerItemProxy */ = {
19 | isa = PBXContainerItemProxy;
20 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
21 | proxyType = 2;
22 | remoteGlobalIDString = D04725EA19E49ED7006002AA;
23 | remoteInfo = "ReactiveCocoa-Mac";
24 | };
25 | 225197A31BB2D80F00DB634F /* PBXContainerItemProxy */ = {
26 | isa = PBXContainerItemProxy;
27 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
28 | proxyType = 2;
29 | remoteGlobalIDString = D04725F519E49ED7006002AA;
30 | remoteInfo = "ReactiveCocoa-MacTests";
31 | };
32 | 225197A51BB2D80F00DB634F /* PBXContainerItemProxy */ = {
33 | isa = PBXContainerItemProxy;
34 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
35 | proxyType = 2;
36 | remoteGlobalIDString = D047260C19E49F82006002AA;
37 | remoteInfo = "ReactiveCocoa-iOS";
38 | };
39 | 225197A71BB2D80F00DB634F /* PBXContainerItemProxy */ = {
40 | isa = PBXContainerItemProxy;
41 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
42 | proxyType = 2;
43 | remoteGlobalIDString = D047261619E49F82006002AA;
44 | remoteInfo = "ReactiveCocoa-iOSTests";
45 | };
46 | 225197A91BB2D80F00DB634F /* PBXContainerItemProxy */ = {
47 | isa = PBXContainerItemProxy;
48 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
49 | proxyType = 2;
50 | remoteGlobalIDString = A9B315541B3940610001CB9C;
51 | remoteInfo = "ReactiveCocoa-watchOS";
52 | };
53 | 225197AB1BB2D80F00DB634F /* PBXContainerItemProxy */ = {
54 | isa = PBXContainerItemProxy;
55 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
56 | proxyType = 2;
57 | remoteGlobalIDString = 57A4D2411BA13D7A00F7D4B1;
58 | remoteInfo = "ReactiveCocoa-tvOS";
59 | };
60 | 225197AD1BB2D84300DB634F /* PBXContainerItemProxy */ = {
61 | isa = PBXContainerItemProxy;
62 | containerPortal = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
63 | proxyType = 1;
64 | remoteGlobalIDString = D04725E919E49ED7006002AA;
65 | remoteInfo = "ReactiveCocoa-Mac";
66 | };
67 | 225197BA1BB2D89E00DB634F /* PBXContainerItemProxy */ = {
68 | isa = PBXContainerItemProxy;
69 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
70 | proxyType = 2;
71 | remoteGlobalIDString = D45480571A9572F5009D7229;
72 | remoteInfo = "Result-Mac";
73 | };
74 | 225197BC1BB2D89E00DB634F /* PBXContainerItemProxy */ = {
75 | isa = PBXContainerItemProxy;
76 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
77 | proxyType = 2;
78 | remoteGlobalIDString = D45480671A9572F5009D7229;
79 | remoteInfo = "Result-MacTests";
80 | };
81 | 225197BE1BB2D89E00DB634F /* PBXContainerItemProxy */ = {
82 | isa = PBXContainerItemProxy;
83 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
84 | proxyType = 2;
85 | remoteGlobalIDString = D454807D1A957361009D7229;
86 | remoteInfo = "Result-iOS";
87 | };
88 | 225197C01BB2D89E00DB634F /* PBXContainerItemProxy */ = {
89 | isa = PBXContainerItemProxy;
90 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
91 | proxyType = 2;
92 | remoteGlobalIDString = D45480871A957362009D7229;
93 | remoteInfo = "Result-iOSTests";
94 | };
95 | 225197C21BB2D89E00DB634F /* PBXContainerItemProxy */ = {
96 | isa = PBXContainerItemProxy;
97 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
98 | proxyType = 2;
99 | remoteGlobalIDString = 57FCDE471BA280DC00130C48;
100 | remoteInfo = "Result-tvOS";
101 | };
102 | 225197C41BB2D89E00DB634F /* PBXContainerItemProxy */ = {
103 | isa = PBXContainerItemProxy;
104 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
105 | proxyType = 2;
106 | remoteGlobalIDString = 57FCDE541BA280E000130C48;
107 | remoteInfo = "Result-tvOSTests";
108 | };
109 | 225197C61BB2D89E00DB634F /* PBXContainerItemProxy */ = {
110 | isa = PBXContainerItemProxy;
111 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
112 | proxyType = 2;
113 | remoteGlobalIDString = D03579A31B2B788F005D26AE;
114 | remoteInfo = "Result-watchOS";
115 | };
116 | 225197C81BB2D89E00DB634F /* PBXContainerItemProxy */ = {
117 | isa = PBXContainerItemProxy;
118 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
119 | proxyType = 2;
120 | remoteGlobalIDString = D03579B01B2B78A1005D26AE;
121 | remoteInfo = "Result-watchOSTests";
122 | };
123 | 225197CA1BB2D8A600DB634F /* PBXContainerItemProxy */ = {
124 | isa = PBXContainerItemProxy;
125 | containerPortal = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
126 | proxyType = 1;
127 | remoteGlobalIDString = D45480561A9572F5009D7229;
128 | remoteInfo = "Result-Mac";
129 | };
130 | /* End PBXContainerItemProxy section */
131 |
132 | /* Begin PBXFileReference section */
133 | 225197961BB2D48A00DB634F /* XCPlayground.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = XCPlayground.framework; sourceTree = ""; };
134 | 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactiveCocoa.xcodeproj; path = ../Carthage/Checkouts/ReactiveCocoa/ReactiveCocoa.xcodeproj; sourceTree = ""; };
135 | 225197AF1BB2D89E00DB634F /* Result.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Result.xcodeproj; path = ../Carthage/Checkouts/Result/Result.xcodeproj; sourceTree = ""; };
136 | 2279ADC21BA91B3C00DA39CB /* PlaygroundSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlaygroundSupport.swift; sourceTree = ""; };
137 | 22D4B2711BA3C030000825FF /* Marbles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Marbles.swift; sourceTree = ""; };
138 | 22D4B2861BA65F43000825FF /* ReactiveMarbles.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveMarbles.framework; sourceTree = BUILT_PRODUCTS_DIR; };
139 | 22D4B28F1BA65FAE000825FF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
140 | 22D4B2901BA65FAE000825FF /* ReactiveMarbles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReactiveMarbles.h; sourceTree = ""; };
141 | 22D4B2931BA673FE000825FF /* NSTimerExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSTimerExtensions.swift; sourceTree = ""; };
142 | /* End PBXFileReference section */
143 |
144 | /* Begin PBXFrameworksBuildPhase section */
145 | 22D4B2821BA65F43000825FF /* Frameworks */ = {
146 | isa = PBXFrameworksBuildPhase;
147 | buildActionMask = 2147483647;
148 | files = (
149 | 225197971BB2D48C00DB634F /* XCPlayground.framework in Frameworks */,
150 | );
151 | runOnlyForDeploymentPostprocessing = 0;
152 | };
153 | /* End PBXFrameworksBuildPhase section */
154 |
155 | /* Begin PBXGroup section */
156 | 225197991BB2D80F00DB634F /* Products */ = {
157 | isa = PBXGroup;
158 | children = (
159 | 225197A21BB2D80F00DB634F /* ReactiveCocoa.framework */,
160 | 225197A41BB2D80F00DB634F /* ReactiveCocoa-MacTests.xctest */,
161 | 225197A61BB2D80F00DB634F /* ReactiveCocoa.framework */,
162 | 225197A81BB2D80F00DB634F /* ReactiveCocoa-iOSTests.xctest */,
163 | 225197AA1BB2D80F00DB634F /* ReactiveCocoa.framework */,
164 | 225197AC1BB2D80F00DB634F /* ReactiveCocoa.framework */,
165 | );
166 | name = Products;
167 | sourceTree = "";
168 | };
169 | 225197B01BB2D89E00DB634F /* Products */ = {
170 | isa = PBXGroup;
171 | children = (
172 | 225197BB1BB2D89E00DB634F /* Result.framework */,
173 | 225197BD1BB2D89E00DB634F /* Result-MacTests.xctest */,
174 | 225197BF1BB2D89E00DB634F /* Result.framework */,
175 | 225197C11BB2D89E00DB634F /* Result-iOSTests.xctest */,
176 | 225197C31BB2D89E00DB634F /* Result.framework */,
177 | 225197C51BB2D89E00DB634F /* Result-tvOSTests.xctest */,
178 | 225197C71BB2D89E00DB634F /* Result.framework */,
179 | 225197C91BB2D89E00DB634F /* Result-watchOSTests.xctest */,
180 | );
181 | name = Products;
182 | sourceTree = "";
183 | };
184 | 22D4B25A1BA3BFC0000825FF = {
185 | isa = PBXGroup;
186 | children = (
187 | 225197AF1BB2D89E00DB634F /* Result.xcodeproj */,
188 | 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */,
189 | 225197961BB2D48A00DB634F /* XCPlayground.framework */,
190 | 22D4B2661BA3BFC0000825FF /* ReactiveMarbles */,
191 | 22D4B2651BA3BFC0000825FF /* Products */,
192 | );
193 | sourceTree = "";
194 | };
195 | 22D4B2651BA3BFC0000825FF /* Products */ = {
196 | isa = PBXGroup;
197 | children = (
198 | 22D4B2861BA65F43000825FF /* ReactiveMarbles.framework */,
199 | );
200 | name = Products;
201 | sourceTree = "";
202 | };
203 | 22D4B2661BA3BFC0000825FF /* ReactiveMarbles */ = {
204 | isa = PBXGroup;
205 | children = (
206 | 22D4B28F1BA65FAE000825FF /* Info.plist */,
207 | 22D4B2901BA65FAE000825FF /* ReactiveMarbles.h */,
208 | 22D4B2711BA3C030000825FF /* Marbles.swift */,
209 | 22D4B2931BA673FE000825FF /* NSTimerExtensions.swift */,
210 | 2279ADC21BA91B3C00DA39CB /* PlaygroundSupport.swift */,
211 | );
212 | path = ReactiveMarbles;
213 | sourceTree = "";
214 | };
215 | /* End PBXGroup section */
216 |
217 | /* Begin PBXHeadersBuildPhase section */
218 | 22D4B2831BA65F43000825FF /* Headers */ = {
219 | isa = PBXHeadersBuildPhase;
220 | buildActionMask = 2147483647;
221 | files = (
222 | 22D4B2921BA65FAE000825FF /* ReactiveMarbles.h in Headers */,
223 | );
224 | runOnlyForDeploymentPostprocessing = 0;
225 | };
226 | /* End PBXHeadersBuildPhase section */
227 |
228 | /* Begin PBXNativeTarget section */
229 | 22D4B2851BA65F43000825FF /* ReactiveMarbles-OSX */ = {
230 | isa = PBXNativeTarget;
231 | buildConfigurationList = 22D4B28B1BA65F43000825FF /* Build configuration list for PBXNativeTarget "ReactiveMarbles-OSX" */;
232 | buildPhases = (
233 | 22D4B2811BA65F43000825FF /* Sources */,
234 | 22D4B2821BA65F43000825FF /* Frameworks */,
235 | 22D4B2831BA65F43000825FF /* Headers */,
236 | 22D4B2841BA65F43000825FF /* Resources */,
237 | );
238 | buildRules = (
239 | );
240 | dependencies = (
241 | 225197CB1BB2D8A600DB634F /* PBXTargetDependency */,
242 | 225197AE1BB2D84300DB634F /* PBXTargetDependency */,
243 | );
244 | name = "ReactiveMarbles-OSX";
245 | productName = ReactiveMarbles;
246 | productReference = 22D4B2861BA65F43000825FF /* ReactiveMarbles.framework */;
247 | productType = "com.apple.product-type.framework";
248 | };
249 | /* End PBXNativeTarget section */
250 |
251 | /* Begin PBXProject section */
252 | 22D4B25B1BA3BFC0000825FF /* Project object */ = {
253 | isa = PBXProject;
254 | attributes = {
255 | LastSwiftUpdateCheck = 0700;
256 | LastUpgradeCheck = 0700;
257 | ORGANIZATIONNAME = "codesplice pty ltd";
258 | TargetAttributes = {
259 | 22D4B2851BA65F43000825FF = {
260 | CreatedOnToolsVersion = 7.0;
261 | };
262 | };
263 | };
264 | buildConfigurationList = 22D4B25E1BA3BFC0000825FF /* Build configuration list for PBXProject "ReactiveMarbles" */;
265 | compatibilityVersion = "Xcode 3.2";
266 | developmentRegion = English;
267 | hasScannedForEncodings = 0;
268 | knownRegions = (
269 | en,
270 | );
271 | mainGroup = 22D4B25A1BA3BFC0000825FF;
272 | productRefGroup = 22D4B2651BA3BFC0000825FF /* Products */;
273 | projectDirPath = "";
274 | projectReferences = (
275 | {
276 | ProductGroup = 225197991BB2D80F00DB634F /* Products */;
277 | ProjectRef = 225197981BB2D80F00DB634F /* ReactiveCocoa.xcodeproj */;
278 | },
279 | {
280 | ProductGroup = 225197B01BB2D89E00DB634F /* Products */;
281 | ProjectRef = 225197AF1BB2D89E00DB634F /* Result.xcodeproj */;
282 | },
283 | );
284 | projectRoot = "";
285 | targets = (
286 | 22D4B2851BA65F43000825FF /* ReactiveMarbles-OSX */,
287 | );
288 | };
289 | /* End PBXProject section */
290 |
291 | /* Begin PBXReferenceProxy section */
292 | 225197A21BB2D80F00DB634F /* ReactiveCocoa.framework */ = {
293 | isa = PBXReferenceProxy;
294 | fileType = wrapper.framework;
295 | path = ReactiveCocoa.framework;
296 | remoteRef = 225197A11BB2D80F00DB634F /* PBXContainerItemProxy */;
297 | sourceTree = BUILT_PRODUCTS_DIR;
298 | };
299 | 225197A41BB2D80F00DB634F /* ReactiveCocoa-MacTests.xctest */ = {
300 | isa = PBXReferenceProxy;
301 | fileType = wrapper.cfbundle;
302 | path = "ReactiveCocoa-MacTests.xctest";
303 | remoteRef = 225197A31BB2D80F00DB634F /* PBXContainerItemProxy */;
304 | sourceTree = BUILT_PRODUCTS_DIR;
305 | };
306 | 225197A61BB2D80F00DB634F /* ReactiveCocoa.framework */ = {
307 | isa = PBXReferenceProxy;
308 | fileType = wrapper.framework;
309 | path = ReactiveCocoa.framework;
310 | remoteRef = 225197A51BB2D80F00DB634F /* PBXContainerItemProxy */;
311 | sourceTree = BUILT_PRODUCTS_DIR;
312 | };
313 | 225197A81BB2D80F00DB634F /* ReactiveCocoa-iOSTests.xctest */ = {
314 | isa = PBXReferenceProxy;
315 | fileType = wrapper.cfbundle;
316 | path = "ReactiveCocoa-iOSTests.xctest";
317 | remoteRef = 225197A71BB2D80F00DB634F /* PBXContainerItemProxy */;
318 | sourceTree = BUILT_PRODUCTS_DIR;
319 | };
320 | 225197AA1BB2D80F00DB634F /* ReactiveCocoa.framework */ = {
321 | isa = PBXReferenceProxy;
322 | fileType = wrapper.framework;
323 | path = ReactiveCocoa.framework;
324 | remoteRef = 225197A91BB2D80F00DB634F /* PBXContainerItemProxy */;
325 | sourceTree = BUILT_PRODUCTS_DIR;
326 | };
327 | 225197AC1BB2D80F00DB634F /* ReactiveCocoa.framework */ = {
328 | isa = PBXReferenceProxy;
329 | fileType = wrapper.framework;
330 | path = ReactiveCocoa.framework;
331 | remoteRef = 225197AB1BB2D80F00DB634F /* PBXContainerItemProxy */;
332 | sourceTree = BUILT_PRODUCTS_DIR;
333 | };
334 | 225197BB1BB2D89E00DB634F /* Result.framework */ = {
335 | isa = PBXReferenceProxy;
336 | fileType = wrapper.framework;
337 | path = Result.framework;
338 | remoteRef = 225197BA1BB2D89E00DB634F /* PBXContainerItemProxy */;
339 | sourceTree = BUILT_PRODUCTS_DIR;
340 | };
341 | 225197BD1BB2D89E00DB634F /* Result-MacTests.xctest */ = {
342 | isa = PBXReferenceProxy;
343 | fileType = wrapper.cfbundle;
344 | path = "Result-MacTests.xctest";
345 | remoteRef = 225197BC1BB2D89E00DB634F /* PBXContainerItemProxy */;
346 | sourceTree = BUILT_PRODUCTS_DIR;
347 | };
348 | 225197BF1BB2D89E00DB634F /* Result.framework */ = {
349 | isa = PBXReferenceProxy;
350 | fileType = wrapper.framework;
351 | path = Result.framework;
352 | remoteRef = 225197BE1BB2D89E00DB634F /* PBXContainerItemProxy */;
353 | sourceTree = BUILT_PRODUCTS_DIR;
354 | };
355 | 225197C11BB2D89E00DB634F /* Result-iOSTests.xctest */ = {
356 | isa = PBXReferenceProxy;
357 | fileType = wrapper.cfbundle;
358 | path = "Result-iOSTests.xctest";
359 | remoteRef = 225197C01BB2D89E00DB634F /* PBXContainerItemProxy */;
360 | sourceTree = BUILT_PRODUCTS_DIR;
361 | };
362 | 225197C31BB2D89E00DB634F /* Result.framework */ = {
363 | isa = PBXReferenceProxy;
364 | fileType = wrapper.framework;
365 | path = Result.framework;
366 | remoteRef = 225197C21BB2D89E00DB634F /* PBXContainerItemProxy */;
367 | sourceTree = BUILT_PRODUCTS_DIR;
368 | };
369 | 225197C51BB2D89E00DB634F /* Result-tvOSTests.xctest */ = {
370 | isa = PBXReferenceProxy;
371 | fileType = wrapper.cfbundle;
372 | path = "Result-tvOSTests.xctest";
373 | remoteRef = 225197C41BB2D89E00DB634F /* PBXContainerItemProxy */;
374 | sourceTree = BUILT_PRODUCTS_DIR;
375 | };
376 | 225197C71BB2D89E00DB634F /* Result.framework */ = {
377 | isa = PBXReferenceProxy;
378 | fileType = wrapper.framework;
379 | path = Result.framework;
380 | remoteRef = 225197C61BB2D89E00DB634F /* PBXContainerItemProxy */;
381 | sourceTree = BUILT_PRODUCTS_DIR;
382 | };
383 | 225197C91BB2D89E00DB634F /* Result-watchOSTests.xctest */ = {
384 | isa = PBXReferenceProxy;
385 | fileType = wrapper.cfbundle;
386 | path = "Result-watchOSTests.xctest";
387 | remoteRef = 225197C81BB2D89E00DB634F /* PBXContainerItemProxy */;
388 | sourceTree = BUILT_PRODUCTS_DIR;
389 | };
390 | /* End PBXReferenceProxy section */
391 |
392 | /* Begin PBXResourcesBuildPhase section */
393 | 22D4B2841BA65F43000825FF /* Resources */ = {
394 | isa = PBXResourcesBuildPhase;
395 | buildActionMask = 2147483647;
396 | files = (
397 | );
398 | runOnlyForDeploymentPostprocessing = 0;
399 | };
400 | /* End PBXResourcesBuildPhase section */
401 |
402 | /* Begin PBXSourcesBuildPhase section */
403 | 22D4B2811BA65F43000825FF /* Sources */ = {
404 | isa = PBXSourcesBuildPhase;
405 | buildActionMask = 2147483647;
406 | files = (
407 | 2279ADC31BA91B3C00DA39CB /* PlaygroundSupport.swift in Sources */,
408 | 22D4B2951BA673FE000825FF /* NSTimerExtensions.swift in Sources */,
409 | 22D4B28E1BA65F50000825FF /* Marbles.swift in Sources */,
410 | );
411 | runOnlyForDeploymentPostprocessing = 0;
412 | };
413 | /* End PBXSourcesBuildPhase section */
414 |
415 | /* Begin PBXTargetDependency section */
416 | 225197AE1BB2D84300DB634F /* PBXTargetDependency */ = {
417 | isa = PBXTargetDependency;
418 | name = "ReactiveCocoa-Mac";
419 | targetProxy = 225197AD1BB2D84300DB634F /* PBXContainerItemProxy */;
420 | };
421 | 225197CB1BB2D8A600DB634F /* PBXTargetDependency */ = {
422 | isa = PBXTargetDependency;
423 | name = "Result-Mac";
424 | targetProxy = 225197CA1BB2D8A600DB634F /* PBXContainerItemProxy */;
425 | };
426 | /* End PBXTargetDependency section */
427 |
428 | /* Begin XCBuildConfiguration section */
429 | 22D4B26A1BA3BFC0000825FF /* Debug */ = {
430 | isa = XCBuildConfiguration;
431 | buildSettings = {
432 | ALWAYS_SEARCH_USER_PATHS = NO;
433 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
434 | CLANG_CXX_LIBRARY = "libc++";
435 | CLANG_ENABLE_MODULES = YES;
436 | CLANG_ENABLE_OBJC_ARC = YES;
437 | CLANG_WARN_BOOL_CONVERSION = YES;
438 | CLANG_WARN_CONSTANT_CONVERSION = YES;
439 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
440 | CLANG_WARN_EMPTY_BODY = YES;
441 | CLANG_WARN_ENUM_CONVERSION = YES;
442 | CLANG_WARN_INT_CONVERSION = YES;
443 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
444 | CLANG_WARN_UNREACHABLE_CODE = YES;
445 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
446 | COPY_PHASE_STRIP = NO;
447 | CURRENT_PROJECT_VERSION = 1;
448 | DEBUG_INFORMATION_FORMAT = dwarf;
449 | ENABLE_STRICT_OBJC_MSGSEND = YES;
450 | ENABLE_TESTABILITY = YES;
451 | GCC_C_LANGUAGE_STANDARD = gnu99;
452 | GCC_DYNAMIC_NO_PIC = NO;
453 | GCC_NO_COMMON_BLOCKS = YES;
454 | GCC_OPTIMIZATION_LEVEL = 0;
455 | GCC_PREPROCESSOR_DEFINITIONS = (
456 | "DEBUG=1",
457 | "$(inherited)",
458 | );
459 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
460 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
461 | GCC_WARN_UNDECLARED_SELECTOR = YES;
462 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
463 | GCC_WARN_UNUSED_FUNCTION = YES;
464 | GCC_WARN_UNUSED_VARIABLE = YES;
465 | MACOSX_DEPLOYMENT_TARGET = 10.10;
466 | MTL_ENABLE_DEBUG_INFO = YES;
467 | ONLY_ACTIVE_ARCH = YES;
468 | SDKROOT = macosx;
469 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
470 | VERSIONING_SYSTEM = "apple-generic";
471 | VERSION_INFO_PREFIX = "";
472 | };
473 | name = Debug;
474 | };
475 | 22D4B26B1BA3BFC0000825FF /* Release */ = {
476 | isa = XCBuildConfiguration;
477 | buildSettings = {
478 | ALWAYS_SEARCH_USER_PATHS = NO;
479 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
480 | CLANG_CXX_LIBRARY = "libc++";
481 | CLANG_ENABLE_MODULES = YES;
482 | CLANG_ENABLE_OBJC_ARC = YES;
483 | CLANG_WARN_BOOL_CONVERSION = YES;
484 | CLANG_WARN_CONSTANT_CONVERSION = YES;
485 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
486 | CLANG_WARN_EMPTY_BODY = YES;
487 | CLANG_WARN_ENUM_CONVERSION = YES;
488 | CLANG_WARN_INT_CONVERSION = YES;
489 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
490 | CLANG_WARN_UNREACHABLE_CODE = YES;
491 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
492 | COPY_PHASE_STRIP = NO;
493 | CURRENT_PROJECT_VERSION = 1;
494 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
495 | ENABLE_NS_ASSERTIONS = NO;
496 | ENABLE_STRICT_OBJC_MSGSEND = YES;
497 | GCC_C_LANGUAGE_STANDARD = gnu99;
498 | GCC_NO_COMMON_BLOCKS = YES;
499 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
500 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
501 | GCC_WARN_UNDECLARED_SELECTOR = YES;
502 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
503 | GCC_WARN_UNUSED_FUNCTION = YES;
504 | GCC_WARN_UNUSED_VARIABLE = YES;
505 | MACOSX_DEPLOYMENT_TARGET = 10.10;
506 | MTL_ENABLE_DEBUG_INFO = NO;
507 | SDKROOT = macosx;
508 | VERSIONING_SYSTEM = "apple-generic";
509 | VERSION_INFO_PREFIX = "";
510 | };
511 | name = Release;
512 | };
513 | 22D4B28C1BA65F43000825FF /* Debug */ = {
514 | isa = XCBuildConfiguration;
515 | buildSettings = {
516 | COMBINE_HIDPI_IMAGES = YES;
517 | DEFINES_MODULE = YES;
518 | DYLIB_COMPATIBILITY_VERSION = 1;
519 | DYLIB_CURRENT_VERSION = 1;
520 | DYLIB_INSTALL_NAME_BASE = "@rpath";
521 | FRAMEWORK_SEARCH_PATHS = (
522 | "$(inherited)",
523 | "$(PROJECT_DIR)",
524 | );
525 | FRAMEWORK_VERSION = A;
526 | INFOPLIST_FILE = ReactiveMarbles/Info.plist;
527 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
528 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
529 | MACOSX_DEPLOYMENT_TARGET = 10.10;
530 | PRODUCT_BUNDLE_IDENTIFIER = au.com.codesplice.ReactiveMarbles;
531 | PRODUCT_NAME = ReactiveMarbles;
532 | SKIP_INSTALL = YES;
533 | };
534 | name = Debug;
535 | };
536 | 22D4B28D1BA65F43000825FF /* Release */ = {
537 | isa = XCBuildConfiguration;
538 | buildSettings = {
539 | COMBINE_HIDPI_IMAGES = YES;
540 | DEFINES_MODULE = YES;
541 | DYLIB_COMPATIBILITY_VERSION = 1;
542 | DYLIB_CURRENT_VERSION = 1;
543 | DYLIB_INSTALL_NAME_BASE = "@rpath";
544 | FRAMEWORK_SEARCH_PATHS = (
545 | "$(inherited)",
546 | "$(PROJECT_DIR)",
547 | );
548 | FRAMEWORK_VERSION = A;
549 | INFOPLIST_FILE = ReactiveMarbles/Info.plist;
550 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
551 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
552 | MACOSX_DEPLOYMENT_TARGET = 10.10;
553 | PRODUCT_BUNDLE_IDENTIFIER = au.com.codesplice.ReactiveMarbles;
554 | PRODUCT_NAME = ReactiveMarbles;
555 | SKIP_INSTALL = YES;
556 | };
557 | name = Release;
558 | };
559 | /* End XCBuildConfiguration section */
560 |
561 | /* Begin XCConfigurationList section */
562 | 22D4B25E1BA3BFC0000825FF /* Build configuration list for PBXProject "ReactiveMarbles" */ = {
563 | isa = XCConfigurationList;
564 | buildConfigurations = (
565 | 22D4B26A1BA3BFC0000825FF /* Debug */,
566 | 22D4B26B1BA3BFC0000825FF /* Release */,
567 | );
568 | defaultConfigurationIsVisible = 0;
569 | defaultConfigurationName = Release;
570 | };
571 | 22D4B28B1BA65F43000825FF /* Build configuration list for PBXNativeTarget "ReactiveMarbles-OSX" */ = {
572 | isa = XCConfigurationList;
573 | buildConfigurations = (
574 | 22D4B28C1BA65F43000825FF /* Debug */,
575 | 22D4B28D1BA65F43000825FF /* Release */,
576 | );
577 | defaultConfigurationIsVisible = 0;
578 | defaultConfigurationName = Release;
579 | };
580 | /* End XCConfigurationList section */
581 | };
582 | rootObject = 22D4B25B1BA3BFC0000825FF /* Project object */;
583 | }
584 |
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles.xcodeproj/xcshareddata/xcschemes/ReactiveMarbles-OSX.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
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 codesplice pty ltd.
25 | NSPrincipalClass
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles/Marbles.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Marbles.swift
3 | // ReactiveMarbles
4 | //
5 | // Created by Sam Ritchie on 12/09/2015.
6 | // Copyright © 2015 codesplice pty ltd.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
9 | // provided that the above copyright notice and this permission notice appear in all copies.
10 | //
11 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
12 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
13 | // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
15 | // OF THIS SOFTWARE.
16 |
17 | import Foundation
18 | import ReactiveCocoa
19 | import SpriteKit
20 |
21 | public enum MarbleColour: String {
22 | case Red, Green, Blue, Yellow, Purple, Orange, Brown, Grey
23 | var skColor: SKColor {
24 | switch self {
25 | case .Red:
26 | return SKColor.redColor()
27 | case .Green:
28 | return SKColor.greenColor()
29 | case .Blue:
30 | return SKColor.blueColor()
31 | case .Yellow:
32 | return SKColor.yellowColor()
33 | case .Purple:
34 | return SKColor.purpleColor()
35 | case .Orange:
36 | return SKColor.orangeColor()
37 | case .Brown:
38 | return SKColor.brownColor()
39 | case .Grey:
40 | return SKColor.grayColor()
41 | }
42 | }
43 | static let allColours = [MarbleColour.Red, .Green, .Blue, .Yellow, .Purple, .Orange, .Brown, .Grey]
44 |
45 | static func random() -> MarbleColour {
46 | return MarbleColour.allColours[Int(arc4random()) % MarbleColour.allColours.count]
47 | }
48 | }
49 |
50 | public enum MarbleSignalColour {
51 | case Single(MarbleColour)
52 | case Random
53 | }
54 |
55 | public struct Marble: CustomDebugStringConvertible {
56 | public let colour: MarbleColour
57 | public let value: Int
58 |
59 | public init(colour: MarbleColour, value: Int) {
60 | self.colour = colour
61 | self.value = value
62 | }
63 |
64 | public var debugDescription: String {
65 | return "Marble(\(colour), \(value))"
66 | }
67 | }
68 |
69 | public func marbleSignal() -> Signal {
70 | return marbleSignal(colour: .Single(.Red))
71 | }
72 |
73 | public func marbleSignal(colour colour: MarbleColour) -> Signal {
74 | return marbleSignal(colour: .Single(colour))
75 | }
76 |
77 | public func marbleSignal(colour colour: MarbleSignalColour) -> Signal {
78 | return Signal { sink in
79 | NSTimer.schedule(repeatInterval: 1.second) { t in
80 | let value = Int(arc4random() % 20)
81 | switch colour {
82 | case let .Single(c):
83 | sendNext(sink, Marble(colour: c, value: value))
84 | case .Random:
85 | sendNext(sink, Marble(colour: MarbleColour.random(), value: value))
86 | }
87 | }
88 | return nil
89 | }
90 | }
91 |
92 | public func irregularMarbleSignal(colour colour: MarbleSignalColour) -> Signal {
93 | return Signal { sink in
94 | NSTimer.schedule(repeatInterval: 0.25.seconds) { t in
95 | if arc4random() % 12 == 0 {
96 | let value = Int(arc4random() % 20)
97 | switch colour {
98 | case let .Single(c):
99 | sendNext(sink, Marble(colour: c, value: value))
100 | case .Random:
101 | sendNext(sink, Marble(colour: MarbleColour.random(), value: value))
102 | }
103 | }
104 | }
105 | return nil
106 | }
107 | }
108 |
109 | public func marbleSignalProducer(signal: Signal) -> SignalProducer {
110 | return SignalProducer { sink, disp in
111 | signal.observe(sink)
112 | }
113 | }
114 |
115 | public func marbleSignalProducer(colour: MarbleColour, count: Int) -> SignalProducer {
116 | return SignalProducer { sink, disp in
117 | NSTimer.schedule(repeatInterval: 1.second) { t in
118 | sendNext(sink, Marble(colour: colour, value: 0))
119 | }
120 | }.take(count)
121 | }
122 |
123 | public class MarbleScene: SKScene {
124 | let signal: SignalProducer
125 | let marbleWidth = CGFloat(50.0)
126 | let showValue: Bool
127 | var mostRecentNode: SKNode?
128 |
129 | public init(signal: Signal, size: CGSize, showValue: Bool = false) {
130 | self.signal = marbleSignalProducer(signal)
131 | self.showValue = showValue
132 | super.init(size: size)
133 | }
134 |
135 | public init(signalProducer: SignalProducer, size: CGSize, showValue: Bool = false) {
136 | self.signal = signalProducer
137 | self.showValue = showValue
138 | super.init(size: size)
139 | }
140 |
141 | required public init?(coder aDecoder: NSCoder) {
142 | signal = marbleSignalProducer(marbleSignal())
143 | self.showValue = false
144 | super.init(coder: aDecoder)
145 | }
146 |
147 | public override func didMoveToView(view: SKView) {
148 | backgroundColor = SKColor.whiteColor()
149 | signal.startWithNext { m in
150 | let marble = SKShapeNode(circleOfRadius: self.marbleWidth/2.0)
151 | marble.fillColor = m.colour.skColor
152 | marble.lineWidth = 0;
153 | var x = self.size.width + (self.marbleWidth/2.0)
154 | if let last = self.mostRecentNode { x = max(x, last.position.x + 5) }
155 | marble.position = CGPoint(x: x, y: self.size.height - (self.marbleWidth))
156 | if self.showValue {
157 | let value = SKLabelNode(text: m.value.description)
158 | value.fontColor = NSColor.blackColor()
159 | value.position = CGPoint(x: 0, y: -self.marbleWidth/4.0)
160 | marble.addChild(value)
161 | }
162 | self.addChild(marble)
163 | let actionMove = SKAction.moveTo(CGPoint(x: -self.marbleWidth, y: self.size.height - (self.marbleWidth)), duration: NSTimeInterval(self.size.width/self.marbleWidth / 2))
164 | let actionMoveDone = SKAction.removeFromParent()
165 | marble.runAction(SKAction.sequence([actionMove, actionMoveDone]))
166 | self.mostRecentNode = marble
167 | }
168 | }
169 | }
170 |
171 | public class CombinedMarbleScene: SKScene {
172 | let signal: SignalProducer<(Marble, Marble), NoError>
173 | let marbleWidth = CGFloat(50.0)
174 | let showValue: Bool
175 |
176 | public init(signalProducer: SignalProducer<(Marble, Marble), NoError>, size: CGSize, showValue: Bool = false) {
177 | self.signal = signalProducer
178 | self.showValue = showValue
179 | super.init(size: size)
180 | }
181 |
182 | required public init?(coder aDecoder: NSCoder) {
183 | signal = SignalProducer<(Marble, Marble), NoError>.empty
184 | self.showValue = false
185 | super.init(coder: aDecoder)
186 | }
187 |
188 | public override func didMoveToView(view: SKView) {
189 | backgroundColor = SKColor.whiteColor()
190 | signal.startWithNext { (m1, m2) in
191 | self.addMarble(m1, height: self.frame.height - (self.marbleWidth/2.0))
192 | self.addMarble(m2, height: self.marbleWidth/2.0)
193 | }
194 | }
195 |
196 | private func addMarble(m: Marble, height: CGFloat) {
197 | let marble = SKShapeNode(circleOfRadius: self.marbleWidth/2.0)
198 | marble.fillColor = m.colour.skColor
199 | marble.lineWidth = 0;
200 | marble.position = CGPoint(x: self.size.width + (self.marbleWidth/2.0), y: height)
201 | if self.showValue {
202 | let value = SKLabelNode(text: m.value.description)
203 | value.fontColor = NSColor.blackColor()
204 | value.position = CGPoint(x: 0, y: -self.marbleWidth/4.0)
205 | marble.addChild(value)
206 | }
207 | self.addChild(marble)
208 | let actionMove = SKAction.moveTo(CGPoint(x: -self.marbleWidth, y: height), duration: NSTimeInterval(self.size.width/self.marbleWidth / 2))
209 | let actionMoveDone = SKAction.removeFromParent()
210 | marble.runAction(SKAction.sequence([actionMove, actionMoveDone]))
211 | }
212 | }
213 |
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles/NSTimerExtensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Thankyou, the githubs! https://gist.github.com/radex/41a1e75bb1290fb5d559
3 | // and https://gist.github.com/natecook1000/b0285b518576b22c4dc8
4 |
5 | import Foundation
6 |
7 | public extension Int {
8 | var second: NSTimeInterval { return NSTimeInterval(self) }
9 | var seconds: NSTimeInterval { return NSTimeInterval(self) }
10 | var minute: NSTimeInterval { return NSTimeInterval(self * 60) }
11 | var minutes: NSTimeInterval { return NSTimeInterval(self * 60) }
12 | var hour: NSTimeInterval { return NSTimeInterval(self * 3600) }
13 | var hours: NSTimeInterval { return NSTimeInterval(self * 3600) }
14 | }
15 |
16 | public extension Double {
17 | var second: NSTimeInterval { return self }
18 | var seconds: NSTimeInterval { return self }
19 | var minute: NSTimeInterval { return self * 60 }
20 | var minutes: NSTimeInterval { return self * 60 }
21 | var hour: NSTimeInterval { return self * 3600 }
22 | var hours: NSTimeInterval { return self * 3600 }
23 | }
24 |
25 | public extension NSTimer {
26 | /**
27 | Creates and schedules a one-time `NSTimer` instance.
28 |
29 | :param: delay The delay before execution.
30 | :param: handler A closure to execute after `delay`.
31 |
32 | :returns: The newly-created `NSTimer` instance.
33 | */
34 | class func schedule(delay delay: NSTimeInterval, handler: NSTimer! -> Void) -> NSTimer {
35 | let fireDate = delay + CFAbsoluteTimeGetCurrent()
36 | let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, 0, 0, 0, handler)
37 | CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes)
38 | return timer
39 | }
40 |
41 | /**
42 | Creates and schedules a repeating `NSTimer` instance.
43 |
44 | :param: repeatInterval The interval between each execution of `handler`. Note that individual calls may be delayed; subsequent calls to `handler` will be based on the time the `NSTimer` was created.
45 | :param: handler A closure to execute after `delay`.
46 |
47 | :returns: The newly-created `NSTimer` instance.
48 | */
49 | class func schedule(repeatInterval interval: NSTimeInterval, handler: NSTimer! -> Void) -> NSTimer {
50 | let fireDate = interval + CFAbsoluteTimeGetCurrent()
51 | let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, interval, 0, 0, handler)
52 | CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes)
53 | return timer
54 | }
55 | }
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles/PlaygroundSupport.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PlaygroundSupport.swift
3 | // ReactiveMarbles
4 | //
5 | // Created by Sam Ritchie on 16/09/2015.
6 | // Copyright © 2015 codesplice pty ltd.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
9 | // provided that the above copyright notice and this permission notice appear in all copies.
10 | //
11 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
12 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
13 | // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
15 | // OF THIS SOFTWARE.
16 |
17 | import Foundation
18 | import SpriteKit
19 | import XCPlayground
20 | import ReactiveCocoa
21 |
22 | public func display(name: String, _ signal: Signal, showValue: Bool = true) {
23 | let container = SKView(frame: CGRect(x: 0, y: 0, width: 500, height: 100))
24 | XCPShowView(name, view: container )
25 | container.presentScene(MarbleScene(signal: signal, size: container.bounds.size, showValue: showValue))
26 | }
27 |
28 | public func display(name: String, _ signal: SignalProducer, showValue: Bool = true) {
29 | let container = SKView(frame: CGRect(x: 0, y: 0, width: 500, height: 100))
30 | XCPShowView(name, view: container )
31 | container.presentScene(MarbleScene(signalProducer: signal, size: container.bounds.size, showValue: showValue))
32 | }
33 |
34 | public func display(name: String, _ signal: SignalProducer<(Marble, Marble), NoError>, showValue: Bool = true) {
35 | let container = SKView(frame: CGRect(x: 0, y: 0, width: 500, height: 100))
36 | XCPShowView(name, view: container )
37 | container.presentScene(CombinedMarbleScene(signalProducer: signal, size: container.bounds.size, showValue: showValue))
38 | }
39 |
--------------------------------------------------------------------------------
/ReactiveMarbles/ReactiveMarbles/ReactiveMarbles.h:
--------------------------------------------------------------------------------
1 | //
2 | // ReactiveMarbles.h
3 | // ReactiveMarbles
4 | //
5 | // Created by Sam Ritchie on 14/09/2015.
6 | // Copyright © 2015 codesplice pty ltd.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
9 | // provided that the above copyright notice and this permission notice appear in all copies.
10 | //
11 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
12 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
13 | // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
15 | // OF THIS SOFTWARE.
16 |
17 | #import
18 |
19 | //! Project version number for ReactiveMarbles.
20 | FOUNDATION_EXPORT double ReactiveMarblesVersionNumber;
21 |
22 | //! Project version string for ReactiveMarbles.
23 | FOUNDATION_EXPORT const unsigned char ReactiveMarblesVersionString[];
24 |
25 | // In this header, you should import all the public headers of your framework using statements like #import
26 |
27 |
28 |
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Modules:
--------------------------------------------------------------------------------
1 | Versions/Current/Modules
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/A/Modules/XCPlayground.swiftmodule/x86_64.swiftdoc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samritchie/ReactiveMarbles/dac9aaecbc4b2ddf13c8d7ea4440dd2b75e2eb86/ReactiveMarbles/XCPlayground.framework/Versions/A/Modules/XCPlayground.swiftmodule/x86_64.swiftdoc
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/A/Modules/XCPlayground.swiftmodule/x86_64.swiftmodule:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samritchie/ReactiveMarbles/dac9aaecbc4b2ddf13c8d7ea4440dd2b75e2eb86/ReactiveMarbles/XCPlayground.framework/Versions/A/Modules/XCPlayground.swiftmodule/x86_64.swiftmodule
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samritchie/ReactiveMarbles/dac9aaecbc4b2ddf13c8d7ea4440dd2b75e2eb86/ReactiveMarbles/XCPlayground.framework/Versions/A/Resources/Info.plist
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/A/Resources/version.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildVersion
6 | 24
7 | CFBundleShortVersionString
8 | 1.0
9 | CFBundleVersion
10 | 8045
11 | ProjectName
12 | DVTPlaygroundSupport
13 | SourceVersion
14 | 8045000000000000
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/A/XCPlayground:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samritchie/ReactiveMarbles/dac9aaecbc4b2ddf13c8d7ea4440dd2b75e2eb86/ReactiveMarbles/XCPlayground.framework/Versions/A/XCPlayground
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/A/_CodeSignature/CodeResources:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | files
6 |
7 | Resources/Info.plist
8 |
9 | zTt/AdCW4SHDw8A4nI0LYxNepyM=
10 |
11 | Resources/version.plist
12 |
13 | +UlqQEmc4rRwg/KTLZ3egOnwCxA=
14 |
15 |
16 | files2
17 |
18 | Modules/XCPlayground.swiftmodule/x86_64.swiftdoc
19 |
20 | s+ctWPjDQta55MhGlC4g7wzon7A=
21 |
22 | Modules/XCPlayground.swiftmodule/x86_64.swiftmodule
23 |
24 | PP6iJnQXzIF499uUzr7ak0jXYDI=
25 |
26 | Resources/Info.plist
27 |
28 | zTt/AdCW4SHDw8A4nI0LYxNepyM=
29 |
30 | Resources/version.plist
31 |
32 | +UlqQEmc4rRwg/KTLZ3egOnwCxA=
33 |
34 |
35 | rules
36 |
37 | ^Resources/
38 |
39 | ^Resources/.*\.lproj/
40 |
41 | optional
42 |
43 | weight
44 | 1000
45 |
46 | ^Resources/.*\.lproj/locversion.plist$
47 |
48 | omit
49 |
50 | weight
51 | 1100
52 |
53 | ^version.plist$
54 |
55 |
56 | rules2
57 |
58 | .*\.dSYM($|/)
59 |
60 | weight
61 | 11
62 |
63 | ^(.*/)?\.DS_Store$
64 |
65 | omit
66 |
67 | weight
68 | 2000
69 |
70 | ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
71 |
72 | nested
73 |
74 | weight
75 | 10
76 |
77 | ^.*
78 |
79 | ^Info\.plist$
80 |
81 | omit
82 |
83 | weight
84 | 20
85 |
86 | ^PkgInfo$
87 |
88 | omit
89 |
90 | weight
91 | 20
92 |
93 | ^Resources/
94 |
95 | weight
96 | 20
97 |
98 | ^Resources/.*\.lproj/
99 |
100 | optional
101 |
102 | weight
103 | 1000
104 |
105 | ^Resources/.*\.lproj/locversion.plist$
106 |
107 | omit
108 |
109 | weight
110 | 1100
111 |
112 | ^[^/]+$
113 |
114 | nested
115 |
116 | weight
117 | 10
118 |
119 | ^embedded\.provisionprofile$
120 |
121 | weight
122 | 20
123 |
124 | ^version\.plist$
125 |
126 | weight
127 | 20
128 |
129 |
130 |
131 |
132 |
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/ReactiveMarbles/XCPlayground.framework/XCPlayground:
--------------------------------------------------------------------------------
1 | Versions/Current/XCPlayground
--------------------------------------------------------------------------------