├── .github
├── stale.yml
└── workflows
│ ├── create-release.yml
│ └── pull_request.yml
├── .gitignore
├── .jazzy.yaml
├── .swiftformat
├── .swiftlint.yml
├── .swiftpm
└── xcode
│ └── package.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── .versionrc
├── Brewfile
├── CHANGELOG.md
├── Cartfile
├── Cartfile.private
├── Cartfile.resolved
├── Dangerfile
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── LICENSE.md
├── Package.resolved
├── Package.swift
├── README.md
├── RxOptional.podspec
├── RxOptional.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ └── xcschemes
│ ├── RxOptional iOS.xcscheme
│ ├── RxOptional macOS.xcscheme
│ ├── RxOptional tvOS.xcscheme
│ └── RxOptional watchOS.xcscheme
├── RxOptionalExample.playground
├── Contents.swift
└── contents.xcplayground
├── Sources
└── RxOptional
│ ├── Observable+Occupiable.swift
│ ├── Observable+Optional.swift
│ ├── Occupiable.swift
│ ├── OptionalType.swift
│ ├── RxOptionalError.swift
│ ├── SharedSequence+Occupiable.swift
│ ├── SharedSequence+Optional.swift
│ └── Supporting Files
│ ├── Info.plist
│ └── RxOptional.h
├── Tests
├── LinuxMain.swift
└── RxOptionalTests
│ ├── OccupiableOperatorsTests.swift
│ ├── OptionalOperatorsTests.swift
│ └── XCTestManifests.swift
├── cleanup.sh
├── pods.sh
├── project-carthage.yml
├── project-spm.yml
└── scripts
├── bump-version.sh
├── carthage.sh
└── xcframeworks.sh
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | daysUntilStale: 60
2 | daysUntilClose: 7
3 | exemptLabels:
4 | - pinned
5 | - security
6 | staleLabel: stale
7 | markComment: >
8 | This issue has been automatically marked as stale because it has not had
9 | recent activity. It will be closed if no further activity occurs.
10 | closeComment: >
11 | This issue has been automatically closed due to an extensive period of inactivity.
12 | If you believe this was done in error, please comment and one of the contributors
13 | will decide on reopening this issue.
14 |
15 |
--------------------------------------------------------------------------------
/.github/workflows/create-release.yml:
--------------------------------------------------------------------------------
1 | name: Create release
2 |
3 | on:
4 | push:
5 | branches: [main]
6 |
7 | jobs:
8 | build:
9 | if: "!contains(github.event.head_commit.message, 'skip ci')"
10 | runs-on: macos-11.0
11 |
12 | steps:
13 | - uses: actions/checkout@v2
14 | with:
15 | fetch-depth: 0
16 |
17 | - name: Fetch all tags
18 | run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
19 |
20 | - name: Bump version
21 | run: |
22 | chmod +x ./scripts/bump-version.sh
23 | ./scripts/bump-version.sh
24 |
25 | # - name: Changelog
26 | # uses: scottbrenner/generate-changelog-action@master
27 | # id: Changelog
28 | # env:
29 | # REPO: ${{ github.repository }}
30 |
31 | - name: Push changes
32 | uses: ad-m/github-push-action@master
33 | with:
34 | github_token: ${{ secrets.GITHUB_TOKEN }}
35 | branch: ${{ github.ref }}
36 |
37 | - name: Restore SPM Cache
38 | uses: actions/cache@v1
39 | with:
40 | path: .build
41 | key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
42 | restore-keys: |
43 | ${{ runner.os }}-spm-
44 |
45 | - name: Resolve dependencies
46 | run: |
47 | brew bundle
48 | bundle
49 |
50 | - name: Release XCFrameworks
51 | run: |
52 | chmod +x ./scripts/xcframeworks.sh
53 | ./scripts/xcframeworks.sh
54 |
55 | - name: Create Release
56 | id: create_release
57 | uses: actions/create-release@v1
58 | env:
59 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
60 | with:
61 | tag_name: ${{ env.RELEASE_VERSION }}
62 | release_name: RxOptional ${{ env.RELEASE_VERSION }}
63 | # body: |
64 | # ${{ steps.Changelog.outputs.changelog }}
65 | draft: false
66 | prerelease: false
67 |
68 | - name: Upload XCFramework
69 | uses: actions/upload-release-asset@v1
70 | env:
71 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
72 | with:
73 | upload_url: ${{ steps.create_release.outputs.upload_url }}
74 | asset_path: ./RxOptional.xcframework.zip
75 | asset_name: RxOptional.xcframework.zip
76 | asset_content_type: application/zip
77 |
78 | - name: Deploy to Cocoapods
79 | run: |
80 | set -eo pipefail
81 | export RELEASE_VERSION="$(git describe --abbrev=0 | tr -d '\n')"
82 | RELEASE_VERSION=${RELEASE_VERSION:1}
83 | pod lib lint --allow-warnings
84 | pod trunk push --allow-warnings
85 | env:
86 | COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
87 |
--------------------------------------------------------------------------------
/.github/workflows/pull_request.yml:
--------------------------------------------------------------------------------
1 | name: Lint, build and test
2 |
3 | on:
4 | pull_request:
5 | branches: [main]
6 |
7 | jobs:
8 | build:
9 | runs-on: macos-latest
10 |
11 | steps:
12 | - uses: actions/checkout@v2
13 | with:
14 | fetch-depth: 0
15 |
16 | - name: Fetch all tags
17 | run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
18 |
19 | - name: Resolve dependencies
20 | run: |
21 | brew bundle
22 | bundle
23 |
24 | - name: Danger
25 | run: |
26 | bundle exec danger
27 | env:
28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29 |
30 | - name: Restore SPM Cache
31 | uses: actions/cache@v1
32 | with:
33 | path: .build
34 | key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
35 | restore-keys: |
36 | ${{ runner.os }}-spm-
37 |
38 | - name: Build and test (SPM)
39 | run: |
40 | swift build
41 | swift test
42 |
43 | - name: Build Cocoapods iOS Demo
44 | run: |
45 | set -eo pipefail
46 | cd Examples
47 | xcodegen
48 | pod install --repo-update
49 | xcodebuild build -scheme 'RxOptionalDemo-iOS' -workspace 'RxOptionalDemo.xcworkspace' -sdk iphonesimulator -destination "platform=iOS simulator,name=iPhone 11"
50 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata
19 | *.swp
20 |
21 | ## Other
22 | *.xccheckout
23 | *.moved-aside
24 | *.xcuserstate
25 | *.xcscmblueprint
26 |
27 | ## Obj-C/Swift specific
28 | *.hmap
29 | *.ipa
30 |
31 | # CocoaPods
32 | #
33 | # We recommend against adding the Pods directory to your .gitignore. However
34 | # you should judge for yourself, the pros and cons are mentioned at:
35 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
36 | #
37 | Pods/
38 |
39 | # Carthage
40 | #
41 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
42 | Carthage/Checkouts
43 | Carthage/Build
44 |
45 | # Swift Package Manager
46 | .build
47 | Package.resolved
48 |
49 | .DS_Store
50 | **/.idea/**
51 |
52 | RxOptional-SPM.xcodeproj
--------------------------------------------------------------------------------
/.jazzy.yaml:
--------------------------------------------------------------------------------
1 | output: ../docs/RxOptional
2 | module: RxOptional
3 | xcodebuild_arguments:
4 | - -scheme
5 | - RxOptional iOS
--------------------------------------------------------------------------------
/.swiftformat:
--------------------------------------------------------------------------------
1 | --allman false
2 | --binarygrouping none
3 | --commas inline
4 | --comments ignore
5 | --decimalgrouping 3,6
6 | --elseposition same-line
7 | --empty void
8 | --exponentcase lowercase
9 | --exponentgrouping disabled
10 | --fractiongrouping disabled
11 | --disable blankLinesAroundMark
12 | --header ignore
13 | --hexgrouping 4,8
14 | --hexliteralcase uppercase
15 | --patternlet hoist
16 | --ifdef indent
17 | --indent 2
18 | --indentcase false
19 | --linebreaks lf
20 | --octalgrouping none
21 | --operatorfunc nospace
22 | --patternlet hoist
23 | --ranges nospace
24 | --self remove
25 | --semicolons inline
26 | --stripunusedargs closure-only
27 | --trimwhitespace always
28 | --wraparguments after-first
29 | --wrapcollections before-first
30 | --enable blankLinesBetweenScopes
31 | --enable redundantVoidReturnType
32 | --enable strongifiedSelf
33 | --enable trailingClosures
34 | --enable trailingSpace
35 | --enable typeSugar
36 | --enable spaceInsideParens
37 | --enable spaceInsideBrackets
38 | --enable spaceInsideBraces
39 | --enable spaceAroundOperators
40 | --enable spaceAroundBraces
41 | --enable redundantParens
42 | --enable redundantNilInit
43 | --enable consecutiveSpaces
44 | --enable anyObjectProtocol
45 | --disable isEmpty
--------------------------------------------------------------------------------
/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - trailing_whitespace
3 | - trailing_comma
4 | - large_tuple
5 | - nesting
6 | - todo
7 | - operator_whitespace
8 | - colon
9 | - identifier_name
10 |
11 | opt_in_rules: # some rules are only opt-in
12 | - empty_count
13 | - yoda_condition
14 | # Find all the available rules by running:
15 | # swiftlint rules
16 |
17 | included:
18 | - Sources
19 | - Tests
20 | - RxOptionalExample.playground
21 |
22 | # excluded: # paths to ignore during linting. Takes precedence over `included`.
23 |
24 | # configurable rules can be customized from this configuration file
25 | # binary rules can set their severity level
26 | force_cast: warning # implicitly
27 | force_try:
28 | severity: warning # explicitly
29 | # rules that have both warning and error levels, can set just the warning level
30 | # implicitly
31 | line_length: 180
32 | # they can set both implicitly with an array
33 | function_body_length: 120
34 | type_body_length:
35 | - 400 # warning
36 | - 500 # error
37 | # or they can set both explicitly
38 | file_length:
39 | warning: 500
40 | error: 1200
41 | # naming rules can set warnings/errors for min_length and max_length
42 | # additionally they can set excluded names
43 | generic_type_name:
44 | min_length: 1 # only warning
45 | max_length: 30
46 |
47 | type_name:
48 | min_length: 2 # only warning
49 | max_length: # warning and error
50 | warning: 100
51 | error: 120
52 | excluded: iPhone # excluded via string
53 | identifier_name:
54 | min_length:
55 | warning: 1
56 | reporter: "xcode"
57 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.versionrc:
--------------------------------------------------------------------------------
1 | {
2 | "releaseCommitMessageFormat": "chore(release): {{currentTag}} [skip ci]",
3 | "compareUrlFormat": "{{host}}/{{owner}}/{{repository}}/branches/compare/{{currentTag}}%0D{{previousTag}}",
4 | "commitUrlFormat": "{{host}}/{{owner}}/{{repository}}/commits/{{hash}}"
5 | }
6 |
--------------------------------------------------------------------------------
/Brewfile:
--------------------------------------------------------------------------------
1 | brew "xcodegen"
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4 |
5 | ### 5.0.6 (2024-10-06)
6 |
7 | There are no actual code changes to this release, we've only removed the original author's e-mail from the repo based on their request. (See #112)
8 |
9 | ### [5.0.5](https://github.com/RxSwiftCommunity/RxOptional/branches/compare/v5.0.5%0Dv5.0.4) (2022-04-14)
10 |
11 | ### [5.0.4](https://github.com/RxSwiftCommunity/RxOptional/branches/compare/v5.0.4%0Dv5.0.3) (2021-10-05)
12 |
13 | ### [5.0.3](https://github.com/RxSwiftCommunity/RxOptional/branches/compare/v5.0.3%0Dv5.0.2) (2021-05-04)
14 |
15 | ### [5.0.2](https://github.com/RxSwiftCommunity/RxOptional/branches/compare/v5.0.2%0Dv5.0.1) (2021-03-31)
16 |
17 | ### [5.0.1](https://github.com/RxSwiftCommunity/RxOptional/branches/compare/v5.0.1%0Dv5.0.0) (2021-02-03)
18 |
19 | ## 5.0.0 (2021-01-20)
20 |
21 |
22 | ### ⚠ BREAKING CHANGES
23 |
24 | * - Moved circleci to githubci
25 | - Supports RxSwift 6.0
26 | - Release xcframeworks
27 |
28 | ### Features
29 |
30 | * Restructure for better support and maintenance ([64eea0c](https://github.com/RxSwiftCommunity/RxOptional/commits/64eea0c51152d1dc89c076a6df133e2b0191f37b))
31 |
32 |
33 | ### Bug Fixes
34 |
35 | * Actions to resolve dependencies before running ([f04fd38](https://github.com/RxSwiftCommunity/RxOptional/commits/f04fd38f67c529ab70da0e3802898e833129aaec))
36 | * Bump version script ([a7a1c20](https://github.com/RxSwiftCommunity/RxOptional/commits/a7a1c20ec46104b10c8bd45767dc326b4a0b3405))
37 | * Commit podspec version bump ([141cc95](https://github.com/RxSwiftCommunity/RxOptional/commits/141cc95fcebc5707c81419849b9c88cfb059aa4c))
38 | * Reenable cleanup script ([c6c73f5](https://github.com/RxSwiftCommunity/RxOptional/commits/c6c73f53280c1f20d7a8415482f6de0d42fe2112))
39 | * Remove unused step in action ([8566368](https://github.com/RxSwiftCommunity/RxOptional/commits/8566368791b701ce309249c9167011261a188558))
40 |
41 | # 4.1.0
42 |
43 | - Add suport for Swift Package Manager
44 |
45 | # 4.0.0
46 |
47 | - Requires RxSwift 5 & Xcode 10.2.
48 | - Minimum iOS deployment target is iOS 9.
49 | - Update WatchOS deployment target to 3.0.
50 |
51 | # 3.6.2
52 |
53 | - Updates RxSwift version.
54 |
55 | # 3.6.0
56 |
57 | - Updated for Swift 4.2 and Xcode 10.
58 |
59 | # 3.5.0
60 |
61 | - Loosen generic constraints to work with any SharingStrategy, instead of just Driver.
62 |
63 | # 3.4.0
64 |
65 | - Swift 4.1 compatibility
66 |
67 | # 3.3.0
68 |
69 | - Upgrades to RxSwift 4.0.
70 |
71 | # 3.2.0
72 |
73 | - Adds `filterNilKeepOptional`.
74 |
75 | # 3.1.3
76 |
77 | - RxSwift 3.0.0 support for Carthage.
78 |
79 | # 3.1.2
80 |
81 | - RxSwift 3.0.0-rc.1 support for Carthage.
82 |
83 | # 3.1.1
84 |
85 | - Improved Carthage support.
86 |
87 | # 3.1.0
88 |
89 | - Migrated Driver extensions into SharedSequenceConvertibleType
90 |
91 | # 3.0.0
92 |
93 | - Swift 3 compatibility
94 |
95 | # 2.1.0
96 |
97 | - Add `distinctUntilChanged` operator
98 |
99 | # 2.0.0
100 |
101 | - **Breaking Change**: Remove `fatalErrorOn*` operators
102 | - **Breaking Change**: Remove guarantees from `catchOnEmpty` operators
103 |
104 | # 1.2.0
105 |
106 | - Add unit tests
107 | - Move to RxSwiftCommunity
108 | - Deprecate 'fatalErrorOn*' operators
109 |
110 | # 1.1.0
111 |
112 | - During release builds `fatalError` are logged
113 | - Use guards
114 |
115 | # 1.0.0
116 |
117 | - First public release
118 | - Add all documentation
119 |
120 | # 0.1.1
121 |
122 | - Initial release
123 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveX/RxSwift" ~> 6.0
--------------------------------------------------------------------------------
/Cartfile.private:
--------------------------------------------------------------------------------
1 | github "Quick/Quick" ~> 3.0
2 | github "Quick/Nimble" ~> 9.0
3 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "Quick/Nimble" "v9.0.0"
2 | github "Quick/Quick" "v3.0.0"
3 | github "ReactiveX/RxSwift" "6.0.0"
4 |
--------------------------------------------------------------------------------
/Dangerfile:
--------------------------------------------------------------------------------
1 | # Sometimes it's a README fix, or something like that - which isn't relevant for
2 | # including in a project's CHANGELOG for example
3 | declared_trivial = (github.pr_title + github.pr_body).include?("#trivial")
4 |
5 | # Make it more obvious that a PR is a work in progress and shouldn't be merged yet
6 | warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]"
7 |
8 | # Warn summary on pull request
9 | if github.pr_body.length < 5
10 | warn "Please provide a summary in the Pull Request description"
11 | end
12 |
13 | # If these are all empty something has gone wrong, better to raise it in a comment
14 | if git.modified_files.empty? && git.added_files.empty? && git.deleted_files.empty?
15 | fail "This PR has no changes at all, this is likely a developer issue."
16 | end
17 |
18 | # Warn when there is a big PR
19 | message("Big PR") if git.lines_of_code > 500
20 | warn("Huge PR") if git.lines_of_code > 1000
21 | fail("Enormous PR. Please split this pull request.") if git.lines_of_code > 3000
22 |
23 | # Warn Cartfile changes
24 | message("Cartfile changed") if git.modified_files.include?("Cartfile")
25 | message("Cartfile.resolved changed") if git.modified_files.include?("Cartfile.resolved")
26 |
27 | # Lint
28 | swiftlint.lint_all_files = true
29 | swiftlint.max_num_violations = 20
30 | swiftlint.config_file = ".swiftlint.yml"
31 | swiftlint.lint_files fail_on_error: true
32 |
33 | # xcov.report(
34 | # scheme: "RxOptional iOS",
35 | # project: "RxOptional.xcodeproj",
36 | # include_targets: "RxOptional.framework",
37 | # minimum_coverage_percentage: 20.0,
38 | # derived_data_path: "Build/",
39 | # )
40 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'cocoapods', '~> 1.10'
4 | gem 'danger', '~> 8.0'
5 | gem 'danger-swiftlint', '~> 0.20'
6 | gem 'jazzy', '~> 0.13'
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | CFPropertyList (3.0.7)
5 | base64
6 | nkf
7 | rexml
8 | activesupport (7.2.2.1)
9 | base64
10 | benchmark (>= 0.3)
11 | bigdecimal
12 | concurrent-ruby (~> 1.0, >= 1.3.1)
13 | connection_pool (>= 2.2.5)
14 | drb
15 | i18n (>= 1.6, < 2)
16 | logger (>= 1.4.2)
17 | minitest (>= 5.1)
18 | securerandom (>= 0.3)
19 | tzinfo (~> 2.0, >= 2.0.5)
20 | addressable (2.8.7)
21 | public_suffix (>= 2.0.2, < 7.0)
22 | algoliasearch (1.27.5)
23 | httpclient (~> 2.8, >= 2.8.3)
24 | json (>= 1.5.1)
25 | atomos (0.1.3)
26 | base64 (0.2.0)
27 | benchmark (0.4.0)
28 | bigdecimal (3.1.9)
29 | claide (1.1.0)
30 | claide-plugins (0.9.2)
31 | cork
32 | nap
33 | open4 (~> 1.3)
34 | cocoapods (1.16.2)
35 | addressable (~> 2.8)
36 | claide (>= 1.0.2, < 2.0)
37 | cocoapods-core (= 1.16.2)
38 | cocoapods-deintegrate (>= 1.0.3, < 2.0)
39 | cocoapods-downloader (>= 2.1, < 3.0)
40 | cocoapods-plugins (>= 1.0.0, < 2.0)
41 | cocoapods-search (>= 1.0.0, < 2.0)
42 | cocoapods-trunk (>= 1.6.0, < 2.0)
43 | cocoapods-try (>= 1.1.0, < 2.0)
44 | colored2 (~> 3.1)
45 | escape (~> 0.0.4)
46 | fourflusher (>= 2.3.0, < 3.0)
47 | gh_inspector (~> 1.0)
48 | molinillo (~> 0.8.0)
49 | nap (~> 1.0)
50 | ruby-macho (>= 2.3.0, < 3.0)
51 | xcodeproj (>= 1.27.0, < 2.0)
52 | cocoapods-core (1.16.2)
53 | activesupport (>= 5.0, < 8)
54 | addressable (~> 2.8)
55 | algoliasearch (~> 1.0)
56 | concurrent-ruby (~> 1.1)
57 | fuzzy_match (~> 2.0.4)
58 | nap (~> 1.0)
59 | netrc (~> 0.11)
60 | public_suffix (~> 4.0)
61 | typhoeus (~> 1.0)
62 | cocoapods-deintegrate (1.0.5)
63 | cocoapods-downloader (2.1)
64 | cocoapods-plugins (1.0.0)
65 | nap
66 | cocoapods-search (1.0.1)
67 | cocoapods-trunk (1.6.0)
68 | nap (>= 0.8, < 2.0)
69 | netrc (~> 0.11)
70 | cocoapods-try (1.2.0)
71 | colored2 (3.1.2)
72 | concurrent-ruby (1.3.4)
73 | connection_pool (2.4.1)
74 | cork (0.3.0)
75 | colored2 (~> 3.1)
76 | danger (8.6.1)
77 | claide (~> 1.0)
78 | claide-plugins (>= 0.9.2)
79 | colored2 (~> 3.1)
80 | cork (~> 0.1)
81 | faraday (>= 0.9.0, < 2.0)
82 | faraday-http-cache (~> 2.0)
83 | git (~> 1.7)
84 | kramdown (~> 2.3)
85 | kramdown-parser-gfm (~> 1.0)
86 | no_proxy_fix
87 | octokit (~> 4.7)
88 | terminal-table (>= 1, < 4)
89 | danger-swiftlint (0.37.0)
90 | danger
91 | rake (> 10)
92 | thor (~> 1.0.0)
93 | drb (2.2.1)
94 | escape (0.0.4)
95 | ethon (0.16.0)
96 | ffi (>= 1.15.0)
97 | faraday (1.10.4)
98 | faraday-em_http (~> 1.0)
99 | faraday-em_synchrony (~> 1.0)
100 | faraday-excon (~> 1.1)
101 | faraday-httpclient (~> 1.0)
102 | faraday-multipart (~> 1.0)
103 | faraday-net_http (~> 1.0)
104 | faraday-net_http_persistent (~> 1.0)
105 | faraday-patron (~> 1.0)
106 | faraday-rack (~> 1.0)
107 | faraday-retry (~> 1.0)
108 | ruby2_keywords (>= 0.0.4)
109 | faraday-em_http (1.0.0)
110 | faraday-em_synchrony (1.0.0)
111 | faraday-excon (1.1.0)
112 | faraday-http-cache (2.5.1)
113 | faraday (>= 0.8)
114 | faraday-httpclient (1.0.1)
115 | faraday-multipart (1.1.0)
116 | multipart-post (~> 2.0)
117 | faraday-net_http (1.0.2)
118 | faraday-net_http_persistent (1.2.0)
119 | faraday-patron (1.0.0)
120 | faraday-rack (1.0.0)
121 | faraday-retry (1.0.3)
122 | ffi (1.17.1)
123 | ffi (1.17.1-x86_64-darwin)
124 | fourflusher (2.3.1)
125 | fuzzy_match (2.0.4)
126 | gh_inspector (1.1.3)
127 | git (1.19.1)
128 | addressable (~> 2.8)
129 | rchardet (~> 1.8)
130 | httpclient (2.8.3)
131 | i18n (1.14.6)
132 | concurrent-ruby (~> 1.0)
133 | jazzy (0.15.3)
134 | cocoapods (~> 1.5)
135 | mustache (~> 1.1)
136 | open4 (~> 1.3)
137 | redcarpet (~> 3.4)
138 | rexml (>= 3.2.7, < 4.0)
139 | rouge (>= 2.0.6, < 5.0)
140 | sassc (~> 2.1)
141 | sqlite3 (~> 1.3)
142 | xcinvoke (~> 0.3.0)
143 | json (2.9.1)
144 | kramdown (2.5.1)
145 | rexml (>= 3.3.9)
146 | kramdown-parser-gfm (1.1.0)
147 | kramdown (~> 2.0)
148 | liferaft (0.0.6)
149 | logger (1.6.4)
150 | mini_portile2 (2.8.8)
151 | minitest (5.25.4)
152 | molinillo (0.8.0)
153 | multipart-post (2.4.1)
154 | mustache (1.1.1)
155 | nanaimo (0.4.0)
156 | nap (1.1.0)
157 | netrc (0.11.0)
158 | nkf (0.2.0)
159 | no_proxy_fix (0.1.2)
160 | octokit (4.25.1)
161 | faraday (>= 1, < 3)
162 | sawyer (~> 0.9)
163 | open4 (1.3.4)
164 | public_suffix (4.0.7)
165 | rake (13.2.1)
166 | rchardet (1.9.0)
167 | redcarpet (3.6.0)
168 | rexml (3.4.0)
169 | rouge (4.5.1)
170 | ruby-macho (2.5.1)
171 | ruby2_keywords (0.0.5)
172 | sassc (2.4.0)
173 | ffi (~> 1.9)
174 | sawyer (0.9.2)
175 | addressable (>= 2.3.5)
176 | faraday (>= 0.17.3, < 3)
177 | securerandom (0.4.1)
178 | sqlite3 (1.7.3)
179 | mini_portile2 (~> 2.8.0)
180 | sqlite3 (1.7.3-x86_64-darwin)
181 | terminal-table (3.0.2)
182 | unicode-display_width (>= 1.1.1, < 3)
183 | thor (1.0.1)
184 | typhoeus (1.4.1)
185 | ethon (>= 0.9.0)
186 | tzinfo (2.0.6)
187 | concurrent-ruby (~> 1.0)
188 | unicode-display_width (2.6.0)
189 | xcinvoke (0.3.0)
190 | liferaft (~> 0.0.6)
191 | xcodeproj (1.27.0)
192 | CFPropertyList (>= 2.3.3, < 4.0)
193 | atomos (~> 0.1.3)
194 | claide (>= 1.0.2, < 2.0)
195 | colored2 (~> 3.1)
196 | nanaimo (~> 0.4.0)
197 | rexml (>= 3.3.6, < 4.0)
198 |
199 | PLATFORMS
200 | ruby
201 | x86_64-darwin-20
202 |
203 | DEPENDENCIES
204 | cocoapods (~> 1.10)
205 | danger (~> 8.0)
206 | danger-swiftlint (~> 0.20)
207 | jazzy (~> 0.13)
208 |
209 | BUNDLED WITH
210 | 2.5.22
211 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Thane Gill
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Thane Gill
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
13 | all 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
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "object": {
3 | "pins": [
4 | {
5 | "package": "CwlCatchException",
6 | "repositoryURL": "https://github.com/mattgallagher/CwlCatchException.git",
7 | "state": {
8 | "branch": null,
9 | "revision": "f809deb30dc5c9d9b78c872e553261a61177721a",
10 | "version": "2.0.0"
11 | }
12 | },
13 | {
14 | "package": "CwlPreconditionTesting",
15 | "repositoryURL": "https://github.com/mattgallagher/CwlPreconditionTesting.git",
16 | "state": {
17 | "branch": null,
18 | "revision": "02b7a39a99c4da27abe03cab2053a9034379639f",
19 | "version": "2.0.0"
20 | }
21 | },
22 | {
23 | "package": "Nimble",
24 | "repositoryURL": "https://github.com/Quick/Nimble.git",
25 | "state": {
26 | "branch": null,
27 | "revision": "e491a6731307bb23783bf664d003be9b2fa59ab5",
28 | "version": "9.0.0"
29 | }
30 | },
31 | {
32 | "package": "Quick",
33 | "repositoryURL": "https://github.com/Quick/Quick.git",
34 | "state": {
35 | "branch": null,
36 | "revision": "0038bcbab4292f3b028632556507c124e5ba69f3",
37 | "version": "3.0.0"
38 | }
39 | },
40 | {
41 | "package": "RxSwift",
42 | "repositoryURL": "https://github.com/ReactiveX/RxSwift.git",
43 | "state": {
44 | "branch": null,
45 | "revision": "c8742ed97fc2f0c015a5ea5eddefb064cd7532d2",
46 | "version": "6.0.0"
47 | }
48 | }
49 | ]
50 | },
51 | "version": 1
52 | }
53 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.2
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(name: "RxOptional",
7 | platforms: [
8 | .macOS(.v10_10), .iOS(.v9), .tvOS(.v9), .watchOS(.v3)
9 | ],
10 | products: [
11 | // Products define the executables and libraries produced by a package, and make them visible to other packages.
12 | .library(name: "RxOptional",
13 | targets: ["RxOptional"])
14 | ],
15 |
16 | dependencies: [
17 | // Dependencies declare other packages that this package depends on.
18 | // Dependencies declare other packages that this package depends on.
19 | .package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "6.0.0")),
20 | // Development
21 | .package(url: "https://github.com/Quick/Quick.git", .upToNextMajor(from: "3.0.0")), // dev
22 | .package(url: "https://github.com/Quick/Nimble.git", .upToNextMajor(from: "9.0.0")) // dev
23 | ],
24 |
25 | targets: [
26 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
27 | // Targets can depend on other targets in this package, and on products in packages which this package depends on.
28 | .target(name: "RxOptional", dependencies: [
29 | .product(name: "RxSwift", package: "RxSwift"),
30 | .product(name: "RxCocoa", package: "RxSwift")
31 | ],
32 | path: "Sources"),
33 | .testTarget(name: "RxOptionalTests", dependencies: ["RxOptional", "Quick", "Nimble"]) // dev
34 | ],
35 | swiftLanguageVersions: [.v5])
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RxOptional
2 |
3 | [](https://circleci.com/gh/RxSwiftCommunity/RxOptional/tree/master)
4 | [](http://cocoapods.org/pods/RxOptional)
5 | [](http://cocoapods.org/pods/RxOptional)
6 | [](http://cocoapods.org/pods/RxOptional)
7 |
8 | RxSwift extensions for Swift optionals and "Occupiable" types.
9 |
10 | ## Usage
11 |
12 | All operators are also available on `Driver` and `Signal`, unless otherwise noted.
13 |
14 | ### Optional Operators
15 |
16 | ##### filterNil
17 |
18 | ```swift
19 | Observable
20 | .of("One", nil, "Three")
21 | .filterNil()
22 | // Type is now Observable
23 | .subscribe { print($0) }
24 | ```
25 |
26 | ```text
27 | next(One)
28 | next(Three)
29 | completed
30 | ```
31 |
32 | ##### replaceNilWith
33 |
34 | ```swift
35 | Observable
36 | .of("One", nil, "Three")
37 | .replaceNilWith("Two")
38 | // Type is now Observable
39 | .subscribe { print($0) }
40 | ```
41 |
42 | ```text
43 | next(One)
44 | next(Two)
45 | next(Three)
46 | completed
47 | ```
48 |
49 | ##### errorOnNil
50 |
51 | Unavailable on `Driver`, because `Driver`s cannot error out.
52 |
53 | By default errors with `RxOptionalError.foundNilWhileUnwrappingOptional`.
54 |
55 | ```swift
56 | Observable
57 | .of("One", nil, "Three")
58 | .errorOnNil()
59 | // Type is now Observable
60 | .subscribe { print($0) }
61 | ```
62 |
63 | ```text
64 | next(One)
65 | error(Found nil while trying to unwrap type >)
66 | ```
67 |
68 | ##### catchOnNil
69 |
70 | ```swift
71 | Observable
72 | .of("One", nil, "Three")
73 | .catchOnNil {
74 | return Observable.just("A String from a new Observable")
75 | }
76 | // Type is now Observable
77 | .subscribe { print($0) }
78 | ```
79 |
80 | ```text
81 | next(One)
82 | next(A String from a new Observable)
83 | next(Three)
84 | completed
85 | ```
86 |
87 | ##### distinctUntilChanged
88 |
89 | ```swift
90 | Observable
91 | .of(5, 6, 6, nil, nil, 3)
92 | .distinctUntilChanged()
93 | .subscribe { print($0) }
94 | ```
95 |
96 | ```text
97 | next(Optional(5))
98 | next(Optional(6))
99 | next(nil)
100 | next(Optional(3))
101 | completed
102 | ```
103 |
104 | ### Occupiable Operators
105 |
106 | Occupiables are:
107 |
108 | - `String`
109 | - `Array`
110 | - `Dictionary`
111 | - `Set`
112 |
113 | Currently in Swift protocols cannot be extended to conform to other protocols.
114 | For now the types listed above conform to `Occupiable`. You can also conform
115 | custom types to `Occupiable`.
116 |
117 | ##### filterEmpty
118 |
119 | ```swift
120 | Observable<[String]>
121 | .of(["Single Element"], [], ["Two", "Elements"])
122 | .filterEmpty()
123 | .subscribe { print($0) }
124 | ```
125 |
126 | ```text
127 | next(["Single Element"])
128 | next(["Two", "Elements"])
129 | completed
130 | ```
131 |
132 | ##### errorOnEmpty
133 |
134 | Unavailable on `Driver`, because `Driver`s cannot error out.
135 |
136 | By default errors with `RxOptionalError.emptyOccupiable`.
137 |
138 | ```swift
139 | Observable<[String]>
140 | .of(["Single Element"], [], ["Two", "Elements"])
141 | .errorOnEmpty()
142 | .subscribe { print($0) }
143 | ```
144 |
145 | ```text
146 | next(["Single Element"])
147 | error(Empty occupiable of type >)
148 | ```
149 |
150 | ##### catchOnEmpty
151 |
152 | ```swift
153 | Observable<[String]>
154 | .of(["Single Element"], [], ["Two", "Elements"])
155 | .catchOnEmpty {
156 | return Observable<[String]>.just(["Not Empty"])
157 | }
158 | .subscribe { print($0) }
159 | ```
160 |
161 | ```text
162 | next(["Single Element"])
163 | next(["Not Empty"])
164 | next(["Two", "Elements"])
165 | completed
166 | ```
167 |
168 | ## Running Examples.playground
169 |
170 | - Run `pod install` in Example directory
171 | - Select RxOptional Examples target
172 | - Build
173 | - Show Debug Area (cmd+shift+Y)
174 | - Click blue play button in Debug Area
175 |
176 | ## Requirements
177 |
178 | - [RxSwift](https://github.com/ReactiveX/RxSwift)
179 | - [RxCocoa](https://github.com/ReactiveX/RxSwift)
180 |
181 | ## Installation
182 |
183 | ### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html)
184 |
185 | RxOptional is available through [CocoaPods](http://cocoapods.org). To install
186 | it, simply add the following line to your Podfile:
187 |
188 | ```ruby
189 | pod 'RxOptional'
190 | ```
191 |
192 | ### [Carthage](https://github.com/Carthage/Carthage)
193 |
194 | Add this to `Cartfile`
195 |
196 | ```
197 | github "RxSwiftCommunity/RxOptional" ~> 4.1.0
198 | ```
199 |
200 | ```
201 | $ carthage update
202 | ```
203 |
204 | ### [Swift Package Manager](https://swift.org/package-manager)
205 |
206 | To use RxOptional as a Swift Package Manager package just add the following in your Package.swift file.
207 |
208 | ```swift
209 | import PackageDescription
210 |
211 | let package = Package(
212 | name: "ProjectName",
213 | dependencies: [
214 | .Package(url: "https://github.com/RxSwiftCommunity/RxOptional")
215 | ]
216 | )
217 | ```
218 |
219 | ## Author
220 |
221 | Thane Gill
222 |
223 | ## License
224 |
225 | RxOptional is available under the MIT license. See the LICENSE file for more info.
226 |
--------------------------------------------------------------------------------
/RxOptional.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "RxOptional"
3 | # Version to always follow latest tag, with fallback to major
4 | s.version = "5.0.6"
5 | s.license = "MIT"
6 | s.summary = "RxSwift extensions for Swift optionals and Occupiable types"
7 |
8 | s.description = <<-DESC
9 | RxSwift extensions for Swift optionals and "Occupiable" types.
10 | DESC
11 |
12 | s.homepage = "https://github.com/RxSwiftCommunity/RxOptional"
13 | s.authors = { "RxSwift Community" => "community@rxswift.org" }
14 | s.source = { :git => "https://github.com/RxSwiftCommunity/RxOptional.git", :tag => "v" + s.version.to_s }
15 | s.swift_version = "5.1"
16 |
17 | s.ios.deployment_target = "11.0"
18 | s.osx.deployment_target = "12.3"
19 | s.watchos.deployment_target = "4.0"
20 | s.tvos.deployment_target = "11.0"
21 |
22 | s.source_files = "Sources/RxOptional/*.swift"
23 | s.requires_arc = true
24 |
25 | s.frameworks = "Foundation"
26 | s.dependency "RxSwift", "~> 6.0"
27 | s.dependency "RxCocoa", "~> 6.0"
28 | end
29 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 51;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 000BD50B0AFF467055827627 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFC6873E87A10E0976D0F20 /* Nimble.framework */; };
11 | 0189A1BB9E6304AB13BBBA1C /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC12B5EDFAD80CA7AF60F84 /* Nimble.framework */; };
12 | 01CB35237B6DA8AC2A530FBA /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2247F253B77B2C7B7C7F4949 /* Quick.framework */; };
13 | 044AA0C99D8038E868604877 /* Observable+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = A125E26BDF738D2B2A6202BF /* Observable+Optional.swift */; };
14 | 05DA8BB8CFA7523A3B249052 /* XCTestManifests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FC88FFB2CC39892B4EFD32 /* XCTestManifests.swift */; };
15 | 064E3E76C201985F40B83D65 /* Quick.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E92F0264BAC6136A79209222 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
16 | 13C697CE2CCBFACBD5531B70 /* Nimble.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FAFC6873E87A10E0976D0F20 /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
17 | 1764F95CDAB104376D26B7DA /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858209A38226FACEC8E72F01 /* OptionalType.swift */; };
18 | 187FCFE934CFB364A6764F00 /* Observable+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = A125E26BDF738D2B2A6202BF /* Observable+Optional.swift */; };
19 | 20651DBEE76021407BCA7E3E /* Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E97AA2CD3DD0D0D830C0E1A /* Occupiable.swift */; };
20 | 2635596B686B33DEDFE43B3D /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D1C8DB5DCD91AEE9C8A3F780 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
21 | 2C6B194C98F945DC149AB54B /* RxOptionalError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A42060607D345E90B247A9 /* RxOptionalError.swift */; };
22 | 2CA52F2500F5477E34EBC755 /* RxOptional macOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA2BA7EDA36C2F7998475CF0 /* RxOptional macOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
23 | 2FA140723E1385B282D4D7A9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 732FC3AC808B5B9617EEC7CE /* Quick.framework */; };
24 | 30A311DA190F3D0B9C954F71 /* Nimble.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC12B5EDFAD80CA7AF60F84 /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
25 | 396A8FB2561438EC2083A99A /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CB4E994750B1F697A40594E /* RxSwift.framework */; };
26 | 3A5CEA20498726E63C4BB598 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E677309EBF1F0AB90EF5B3F /* RxCocoa.framework */; };
27 | 3C6E9708CEFE699C3C6D7661 /* OptionalOperatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D944ECA20D955D4B060C77 /* OptionalOperatorsTests.swift */; };
28 | 3DFF267FDE42DBA93A90363C /* RxOptionalError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A42060607D345E90B247A9 /* RxOptionalError.swift */; };
29 | 4019F792CA6A2FB672D165F9 /* RxCocoa.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C153F760FF053539F5510716 /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
30 | 419FA8DA0B974EE6CDE14090 /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858209A38226FACEC8E72F01 /* OptionalType.swift */; };
31 | 42F7CA0560304FC1D06BAA65 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1C8DB5DCD91AEE9C8A3F780 /* RxSwift.framework */; };
32 | 4712D24B4812B278345EAA6A /* RxOptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B6F8B84B08FC20621F94BBC /* RxOptional.h */; settings = {ATTRIBUTES = (Public, ); }; };
33 | 48D56DC4312CF4F9622EE1EF /* XCTestManifests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FC88FFB2CC39892B4EFD32 /* XCTestManifests.swift */; };
34 | 5040E5CCAF5942002B74817E /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858209A38226FACEC8E72F01 /* OptionalType.swift */; };
35 | 52AD08974C058EC79D5A1DA5 /* RxOptional iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F69BF78978CDB72ED600BBEE /* RxOptional iOS.framework */; };
36 | 54497D9B18234E414BE1F461 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C153F760FF053539F5510716 /* RxCocoa.framework */; };
37 | 54692641C9F5ED2420A13C82 /* RxOptional iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F69BF78978CDB72ED600BBEE /* RxOptional iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
38 | 55AB52B176FDA8935CA11712 /* RxOptional macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA2BA7EDA36C2F7998475CF0 /* RxOptional macOS.framework */; };
39 | 56FBD7BC7478DB29E609246F /* Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E97AA2CD3DD0D0D830C0E1A /* Occupiable.swift */; };
40 | 581CF9B17343BA5D37681EA3 /* Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E97AA2CD3DD0D0D830C0E1A /* Occupiable.swift */; };
41 | 5A82256F804CBC2810DB667A /* RxCocoa.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7CD7A384FF6847C3277EEF3F /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
42 | 5FF9B6AF1EA2B41BF61149CD /* RxCocoa.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9E677309EBF1F0AB90EF5B3F /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
43 | 624F64815969F8E37C50A652 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1679BA9C35567D5F504FE32 /* RxCocoa.framework */; };
44 | 64F3EDA83E5F65A73365C2EF /* RxOptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B6F8B84B08FC20621F94BBC /* RxOptional.h */; settings = {ATTRIBUTES = (Public, ); }; };
45 | 661668935F4D9B4A2FBA3FAD /* Observable+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB87D9F1A78D37B6147D4DA5 /* Observable+Occupiable.swift */; };
46 | 673055954AD9043C6BDFAD9C /* SharedSequence+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA3031434D921796B780D82 /* SharedSequence+Optional.swift */; };
47 | 70DA4EABF427830FCD3CB601 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C55530428263FAED4EB4ADEC /* RxSwift.framework */; };
48 | 7F9E871C818BADF9FDE23329 /* RxOptional tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37E304B8E9B54DB2D6281F46 /* RxOptional tvOS.framework */; };
49 | 7FD2C379DC54A289596BB700 /* OptionalOperatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D944ECA20D955D4B060C77 /* OptionalOperatorsTests.swift */; };
50 | 8207476E41AFF8FCC0D53F8C /* RxOptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B6F8B84B08FC20621F94BBC /* RxOptional.h */; settings = {ATTRIBUTES = (Public, ); }; };
51 | 886DED726292CFEF6D3BC118 /* OccupiableOperatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBAF4DD97C6BC69E0085F77 /* OccupiableOperatorsTests.swift */; };
52 | 8E6DA53CDD03221981843432 /* SharedSequence+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA3031434D921796B780D82 /* SharedSequence+Optional.swift */; };
53 | 900DE61BCB0672CD78B1526D /* OccupiableOperatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBAF4DD97C6BC69E0085F77 /* OccupiableOperatorsTests.swift */; };
54 | 9457D1D790D8C6F2DD2A49AC /* RxOptionalError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A42060607D345E90B247A9 /* RxOptionalError.swift */; };
55 | 9A5EC302705D9D55686AEF70 /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858209A38226FACEC8E72F01 /* OptionalType.swift */; };
56 | 9D4F9F617F5BD082337B4E19 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C55530428263FAED4EB4ADEC /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
57 | 9FEC6425C9697C2BB9C734DB /* Nimble.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8FE3D7B8CE3525490933B21B /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
58 | B741B98CCAD36BBBAE0A5185 /* XCTestManifests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FC88FFB2CC39892B4EFD32 /* XCTestManifests.swift */; };
59 | BAA5F1EE5652A97562AD58D4 /* RxOptionalError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A42060607D345E90B247A9 /* RxOptionalError.swift */; };
60 | BE7DE589D0C9403DB9E7D9EF /* SharedSequence+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FD2A06CC523C21E0D8548B /* SharedSequence+Occupiable.swift */; };
61 | C3F7265C293A824E8AE14C96 /* Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E97AA2CD3DD0D0D830C0E1A /* Occupiable.swift */; };
62 | C666907E86E8335302B10173 /* SharedSequence+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA3031434D921796B780D82 /* SharedSequence+Optional.swift */; };
63 | C89EC80689518816E663194C /* OptionalOperatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D944ECA20D955D4B060C77 /* OptionalOperatorsTests.swift */; };
64 | CE96D5B0552BF66D099562D6 /* SharedSequence+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FD2A06CC523C21E0D8548B /* SharedSequence+Occupiable.swift */; };
65 | CF2A7F10B6CB312D1FC2103E /* Observable+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = A125E26BDF738D2B2A6202BF /* Observable+Optional.swift */; };
66 | CF87F131C080F0A1EBF62A26 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2F901A32FE130D2832D7923C /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
67 | D3097E79B6C04E9051B6DEE3 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E92F0264BAC6136A79209222 /* Quick.framework */; };
68 | D31F7923A2E787977FA083A9 /* Quick.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 732FC3AC808B5B9617EEC7CE /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
69 | D39548268F529B62E3B5459A /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FE3D7B8CE3525490933B21B /* Nimble.framework */; };
70 | D87354414F5364D3F8F18B4E /* RxOptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B6F8B84B08FC20621F94BBC /* RxOptional.h */; settings = {ATTRIBUTES = (Public, ); }; };
71 | D8D6EC702226BABD9D7915DF /* SharedSequence+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA3031434D921796B780D82 /* SharedSequence+Optional.swift */; };
72 | D9FF640FFF56491F6FA2CB47 /* SharedSequence+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FD2A06CC523C21E0D8548B /* SharedSequence+Occupiable.swift */; };
73 | DF147FDD2285BF53693069B5 /* OccupiableOperatorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBAF4DD97C6BC69E0085F77 /* OccupiableOperatorsTests.swift */; };
74 | E666B56802A3C20AB0D486CF /* SharedSequence+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FD2A06CC523C21E0D8548B /* SharedSequence+Occupiable.swift */; };
75 | E6B6AC26A338A8887FFC1012 /* Observable+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB87D9F1A78D37B6147D4DA5 /* Observable+Occupiable.swift */; };
76 | E9C044AAA31B80E95AEDA4C9 /* Quick.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2247F253B77B2C7B7C7F4949 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
77 | EF3278EE5C59887057C03B2E /* RxOptional tvOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 37E304B8E9B54DB2D6281F46 /* RxOptional tvOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
78 | F500B32C301B0D6C6D4F2428 /* Observable+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB87D9F1A78D37B6147D4DA5 /* Observable+Occupiable.swift */; };
79 | F7E5258592F58D48509ADD51 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F901A32FE130D2832D7923C /* RxSwift.framework */; };
80 | F8A613756AF9EBEB87C4ECA0 /* Observable+Occupiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB87D9F1A78D37B6147D4DA5 /* Observable+Occupiable.swift */; };
81 | FA7545955B3616E837F6B3CE /* Observable+Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = A125E26BDF738D2B2A6202BF /* Observable+Optional.swift */; };
82 | FF68C51B63D8F1B5F2B9CE75 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CD7A384FF6847C3277EEF3F /* RxCocoa.framework */; };
83 | /* End PBXBuildFile section */
84 |
85 | /* Begin PBXContainerItemProxy section */
86 | 2183009D206FCBE8C081CD56 /* PBXContainerItemProxy */ = {
87 | isa = PBXContainerItemProxy;
88 | containerPortal = 54001DEDA5CA627B9FD8FD3C /* Project object */;
89 | proxyType = 1;
90 | remoteGlobalIDString = 6F69539CB7F6307A6DBF3899;
91 | remoteInfo = "RxOptional iOS";
92 | };
93 | 2F4CBEBD0E6A1A4CA12BE919 /* PBXContainerItemProxy */ = {
94 | isa = PBXContainerItemProxy;
95 | containerPortal = 54001DEDA5CA627B9FD8FD3C /* Project object */;
96 | proxyType = 1;
97 | remoteGlobalIDString = 1CD2B6EA4FA6F3E24B74D63F;
98 | remoteInfo = "RxOptional tvOS";
99 | };
100 | 587E2CAE59202D0A38B9A562 /* PBXContainerItemProxy */ = {
101 | isa = PBXContainerItemProxy;
102 | containerPortal = 54001DEDA5CA627B9FD8FD3C /* Project object */;
103 | proxyType = 1;
104 | remoteGlobalIDString = 6A00D0484A59D091E8911045;
105 | remoteInfo = "RxOptional macOS";
106 | };
107 | /* End PBXContainerItemProxy section */
108 |
109 | /* Begin PBXCopyFilesBuildPhase section */
110 | 28EE978238BD64741D4C7DB2 /* Embed Frameworks */ = {
111 | isa = PBXCopyFilesBuildPhase;
112 | buildActionMask = 2147483647;
113 | dstPath = "";
114 | dstSubfolderSpec = 10;
115 | files = (
116 | 2CA52F2500F5477E34EBC755 /* RxOptional macOS.framework in Embed Frameworks */,
117 | 9FEC6425C9697C2BB9C734DB /* Nimble.framework in Embed Frameworks */,
118 | D31F7923A2E787977FA083A9 /* Quick.framework in Embed Frameworks */,
119 | 5A82256F804CBC2810DB667A /* RxCocoa.framework in Embed Frameworks */,
120 | 9D4F9F617F5BD082337B4E19 /* RxSwift.framework in Embed Frameworks */,
121 | );
122 | name = "Embed Frameworks";
123 | runOnlyForDeploymentPostprocessing = 0;
124 | };
125 | 33314C03BDAD7CDAD7753EAA /* Embed Frameworks */ = {
126 | isa = PBXCopyFilesBuildPhase;
127 | buildActionMask = 2147483647;
128 | dstPath = "";
129 | dstSubfolderSpec = 10;
130 | files = (
131 | EF3278EE5C59887057C03B2E /* RxOptional tvOS.framework in Embed Frameworks */,
132 | 13C697CE2CCBFACBD5531B70 /* Nimble.framework in Embed Frameworks */,
133 | 064E3E76C201985F40B83D65 /* Quick.framework in Embed Frameworks */,
134 | 5FF9B6AF1EA2B41BF61149CD /* RxCocoa.framework in Embed Frameworks */,
135 | 2635596B686B33DEDFE43B3D /* RxSwift.framework in Embed Frameworks */,
136 | );
137 | name = "Embed Frameworks";
138 | runOnlyForDeploymentPostprocessing = 0;
139 | };
140 | 641C1BF05BC5334B533DBF62 /* Embed Frameworks */ = {
141 | isa = PBXCopyFilesBuildPhase;
142 | buildActionMask = 2147483647;
143 | dstPath = "";
144 | dstSubfolderSpec = 10;
145 | files = (
146 | 54692641C9F5ED2420A13C82 /* RxOptional iOS.framework in Embed Frameworks */,
147 | 30A311DA190F3D0B9C954F71 /* Nimble.framework in Embed Frameworks */,
148 | E9C044AAA31B80E95AEDA4C9 /* Quick.framework in Embed Frameworks */,
149 | 4019F792CA6A2FB672D165F9 /* RxCocoa.framework in Embed Frameworks */,
150 | CF87F131C080F0A1EBF62A26 /* RxSwift.framework in Embed Frameworks */,
151 | );
152 | name = "Embed Frameworks";
153 | runOnlyForDeploymentPostprocessing = 0;
154 | };
155 | /* End PBXCopyFilesBuildPhase section */
156 |
157 | /* Begin PBXFileReference section */
158 | 02D944ECA20D955D4B060C77 /* OptionalOperatorsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionalOperatorsTests.swift; sourceTree = ""; };
159 | 0B6F8B84B08FC20621F94BBC /* RxOptional.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RxOptional.h; sourceTree = ""; };
160 | 0CC12B5EDFAD80CA7AF60F84 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = ""; };
161 | 1B7655DD09E6FBBC65422899 /* RxOptionalTests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RxOptionalTests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
162 | 2247F253B77B2C7B7C7F4949 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = ""; };
163 | 2F901A32FE130D2832D7923C /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; };
164 | 37E304B8E9B54DB2D6281F46 /* RxOptional tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxOptional tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
165 | 42B73550C55898B45112C8A7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
166 | 44FC88FFB2CC39892B4EFD32 /* XCTestManifests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTestManifests.swift; sourceTree = ""; };
167 | 5CA3031434D921796B780D82 /* SharedSequence+Optional.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SharedSequence+Optional.swift"; sourceTree = ""; };
168 | 5EBAF4DD97C6BC69E0085F77 /* OccupiableOperatorsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OccupiableOperatorsTests.swift; sourceTree = ""; };
169 | 69FD2A06CC523C21E0D8548B /* SharedSequence+Occupiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SharedSequence+Occupiable.swift"; sourceTree = ""; };
170 | 732FC3AC808B5B9617EEC7CE /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = ""; };
171 | 7CD7A384FF6847C3277EEF3F /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; };
172 | 81A42060607D345E90B247A9 /* RxOptionalError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxOptionalError.swift; sourceTree = ""; };
173 | 858209A38226FACEC8E72F01 /* OptionalType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionalType.swift; sourceTree = ""; };
174 | 8CB4E994750B1F697A40594E /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; };
175 | 8E97AA2CD3DD0D0D830C0E1A /* Occupiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Occupiable.swift; sourceTree = ""; };
176 | 8FE3D7B8CE3525490933B21B /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = ""; };
177 | 9E677309EBF1F0AB90EF5B3F /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; };
178 | A125E26BDF738D2B2A6202BF /* Observable+Optional.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Observable+Optional.swift"; sourceTree = ""; };
179 | BF34A8D0BE70F26739BD5097 /* RxOptionalTests iOS.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "RxOptionalTests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
180 | C153F760FF053539F5510716 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; };
181 | C1679BA9C35567D5F504FE32 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = ""; };
182 | C55530428263FAED4EB4ADEC /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; };
183 | CB87D9F1A78D37B6147D4DA5 /* Observable+Occupiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Observable+Occupiable.swift"; sourceTree = ""; };
184 | CEC38EC84F9C77E55FDD6708 /* RxOptional watchOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxOptional watchOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
185 | D1C8DB5DCD91AEE9C8A3F780 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = ""; };
186 | D4DD625AF54CF2767D5FAA20 /* RxOptionalTests tvOS.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "RxOptionalTests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
187 | DA2BA7EDA36C2F7998475CF0 /* RxOptional macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxOptional macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
188 | E92F0264BAC6136A79209222 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = ""; };
189 | F69BF78978CDB72ED600BBEE /* RxOptional iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "RxOptional iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
190 | FAFC6873E87A10E0976D0F20 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = ""; };
191 | /* End PBXFileReference section */
192 |
193 | /* Begin PBXFrameworksBuildPhase section */
194 | 4A283B28B5E7758DA08D899C /* Frameworks */ = {
195 | isa = PBXFrameworksBuildPhase;
196 | buildActionMask = 2147483647;
197 | files = (
198 | 7F9E871C818BADF9FDE23329 /* RxOptional tvOS.framework in Frameworks */,
199 | 000BD50B0AFF467055827627 /* Nimble.framework in Frameworks */,
200 | D3097E79B6C04E9051B6DEE3 /* Quick.framework in Frameworks */,
201 | );
202 | runOnlyForDeploymentPostprocessing = 0;
203 | };
204 | 8BA354BAFBA21B9C59F367EE /* Frameworks */ = {
205 | isa = PBXFrameworksBuildPhase;
206 | buildActionMask = 2147483647;
207 | files = (
208 | 55AB52B176FDA8935CA11712 /* RxOptional macOS.framework in Frameworks */,
209 | D39548268F529B62E3B5459A /* Nimble.framework in Frameworks */,
210 | 2FA140723E1385B282D4D7A9 /* Quick.framework in Frameworks */,
211 | );
212 | runOnlyForDeploymentPostprocessing = 0;
213 | };
214 | 91572F5C6ED68D2D916DA745 /* Frameworks */ = {
215 | isa = PBXFrameworksBuildPhase;
216 | buildActionMask = 2147483647;
217 | files = (
218 | 52AD08974C058EC79D5A1DA5 /* RxOptional iOS.framework in Frameworks */,
219 | 0189A1BB9E6304AB13BBBA1C /* Nimble.framework in Frameworks */,
220 | 01CB35237B6DA8AC2A530FBA /* Quick.framework in Frameworks */,
221 | );
222 | runOnlyForDeploymentPostprocessing = 0;
223 | };
224 | 94D0CDC77A85CB3B73CF4B41 /* Frameworks */ = {
225 | isa = PBXFrameworksBuildPhase;
226 | buildActionMask = 2147483647;
227 | files = (
228 | FF68C51B63D8F1B5F2B9CE75 /* RxCocoa.framework in Frameworks */,
229 | 70DA4EABF427830FCD3CB601 /* RxSwift.framework in Frameworks */,
230 | );
231 | runOnlyForDeploymentPostprocessing = 0;
232 | };
233 | C76065511DCCB4F2DCB478B0 /* Frameworks */ = {
234 | isa = PBXFrameworksBuildPhase;
235 | buildActionMask = 2147483647;
236 | files = (
237 | 624F64815969F8E37C50A652 /* RxCocoa.framework in Frameworks */,
238 | 396A8FB2561438EC2083A99A /* RxSwift.framework in Frameworks */,
239 | );
240 | runOnlyForDeploymentPostprocessing = 0;
241 | };
242 | CA2DD4BA8907534D073DAA30 /* Frameworks */ = {
243 | isa = PBXFrameworksBuildPhase;
244 | buildActionMask = 2147483647;
245 | files = (
246 | 54497D9B18234E414BE1F461 /* RxCocoa.framework in Frameworks */,
247 | F7E5258592F58D48509ADD51 /* RxSwift.framework in Frameworks */,
248 | );
249 | runOnlyForDeploymentPostprocessing = 0;
250 | };
251 | FA69B763073EB943E50D4C31 /* Frameworks */ = {
252 | isa = PBXFrameworksBuildPhase;
253 | buildActionMask = 2147483647;
254 | files = (
255 | 3A5CEA20498726E63C4BB598 /* RxCocoa.framework in Frameworks */,
256 | 42F7CA0560304FC1D06BAA65 /* RxSwift.framework in Frameworks */,
257 | );
258 | runOnlyForDeploymentPostprocessing = 0;
259 | };
260 | /* End PBXFrameworksBuildPhase section */
261 |
262 | /* Begin PBXGroup section */
263 | 08AB2D62844A2647E9FB4EAF /* Frameworks */ = {
264 | isa = PBXGroup;
265 | children = (
266 | CFC59C2F105D3BB00893E158 /* Carthage */,
267 | );
268 | name = Frameworks;
269 | sourceTree = "";
270 | };
271 | 51904C1107C14322C90D93E7 /* Supporting Files */ = {
272 | isa = PBXGroup;
273 | children = (
274 | 42B73550C55898B45112C8A7 /* Info.plist */,
275 | 0B6F8B84B08FC20621F94BBC /* RxOptional.h */,
276 | );
277 | path = "Supporting Files";
278 | sourceTree = "";
279 | };
280 | 51EDEA8B3CC1C5E4371795EE /* tvOS */ = {
281 | isa = PBXGroup;
282 | children = (
283 | FAFC6873E87A10E0976D0F20 /* Nimble.framework */,
284 | E92F0264BAC6136A79209222 /* Quick.framework */,
285 | 9E677309EBF1F0AB90EF5B3F /* RxCocoa.framework */,
286 | D1C8DB5DCD91AEE9C8A3F780 /* RxSwift.framework */,
287 | );
288 | path = tvOS;
289 | sourceTree = "";
290 | };
291 | 5995B79176C5ADF92DB922BD /* iOS */ = {
292 | isa = PBXGroup;
293 | children = (
294 | 0CC12B5EDFAD80CA7AF60F84 /* Nimble.framework */,
295 | 2247F253B77B2C7B7C7F4949 /* Quick.framework */,
296 | C153F760FF053539F5510716 /* RxCocoa.framework */,
297 | 2F901A32FE130D2832D7923C /* RxSwift.framework */,
298 | );
299 | path = iOS;
300 | sourceTree = "";
301 | };
302 | 6A4F5786DA2A95CE667375D2 /* RxOptional */ = {
303 | isa = PBXGroup;
304 | children = (
305 | CB87D9F1A78D37B6147D4DA5 /* Observable+Occupiable.swift */,
306 | A125E26BDF738D2B2A6202BF /* Observable+Optional.swift */,
307 | 8E97AA2CD3DD0D0D830C0E1A /* Occupiable.swift */,
308 | 858209A38226FACEC8E72F01 /* OptionalType.swift */,
309 | 81A42060607D345E90B247A9 /* RxOptionalError.swift */,
310 | 69FD2A06CC523C21E0D8548B /* SharedSequence+Occupiable.swift */,
311 | 5CA3031434D921796B780D82 /* SharedSequence+Optional.swift */,
312 | 51904C1107C14322C90D93E7 /* Supporting Files */,
313 | );
314 | name = RxOptional;
315 | path = Sources/RxOptional;
316 | sourceTree = "";
317 | };
318 | 89D0A64CBFA71FD3C4F77922 /* Mac */ = {
319 | isa = PBXGroup;
320 | children = (
321 | 8FE3D7B8CE3525490933B21B /* Nimble.framework */,
322 | 732FC3AC808B5B9617EEC7CE /* Quick.framework */,
323 | 7CD7A384FF6847C3277EEF3F /* RxCocoa.framework */,
324 | C55530428263FAED4EB4ADEC /* RxSwift.framework */,
325 | );
326 | path = Mac;
327 | sourceTree = "";
328 | };
329 | 8B0E1322337CBD4407AB44CE = {
330 | isa = PBXGroup;
331 | children = (
332 | 6A4F5786DA2A95CE667375D2 /* RxOptional */,
333 | BA630C521A3B8673F7CFD067 /* RxOptionalTests */,
334 | 08AB2D62844A2647E9FB4EAF /* Frameworks */,
335 | 9FDFB0D148865C4684394AA4 /* Products */,
336 | );
337 | indentWidth = 2;
338 | sourceTree = "";
339 | tabWidth = 2;
340 | usesTabs = 0;
341 | };
342 | 9FDFB0D148865C4684394AA4 /* Products */ = {
343 | isa = PBXGroup;
344 | children = (
345 | F69BF78978CDB72ED600BBEE /* RxOptional iOS.framework */,
346 | DA2BA7EDA36C2F7998475CF0 /* RxOptional macOS.framework */,
347 | 37E304B8E9B54DB2D6281F46 /* RxOptional tvOS.framework */,
348 | CEC38EC84F9C77E55FDD6708 /* RxOptional watchOS.framework */,
349 | BF34A8D0BE70F26739BD5097 /* RxOptionalTests iOS.xctest */,
350 | 1B7655DD09E6FBBC65422899 /* RxOptionalTests macOS.xctest */,
351 | D4DD625AF54CF2767D5FAA20 /* RxOptionalTests tvOS.xctest */,
352 | );
353 | name = Products;
354 | sourceTree = "";
355 | };
356 | BA630C521A3B8673F7CFD067 /* RxOptionalTests */ = {
357 | isa = PBXGroup;
358 | children = (
359 | 5EBAF4DD97C6BC69E0085F77 /* OccupiableOperatorsTests.swift */,
360 | 02D944ECA20D955D4B060C77 /* OptionalOperatorsTests.swift */,
361 | 44FC88FFB2CC39892B4EFD32 /* XCTestManifests.swift */,
362 | );
363 | name = RxOptionalTests;
364 | path = Tests/RxOptionalTests;
365 | sourceTree = "";
366 | };
367 | CFC59C2F105D3BB00893E158 /* Carthage */ = {
368 | isa = PBXGroup;
369 | children = (
370 | 5995B79176C5ADF92DB922BD /* iOS */,
371 | 89D0A64CBFA71FD3C4F77922 /* Mac */,
372 | 51EDEA8B3CC1C5E4371795EE /* tvOS */,
373 | E77329B4272F2FAB7AB37132 /* watchOS */,
374 | );
375 | name = Carthage;
376 | path = Carthage/Build;
377 | sourceTree = "";
378 | };
379 | E77329B4272F2FAB7AB37132 /* watchOS */ = {
380 | isa = PBXGroup;
381 | children = (
382 | C1679BA9C35567D5F504FE32 /* RxCocoa.framework */,
383 | 8CB4E994750B1F697A40594E /* RxSwift.framework */,
384 | );
385 | path = watchOS;
386 | sourceTree = "";
387 | };
388 | /* End PBXGroup section */
389 |
390 | /* Begin PBXHeadersBuildPhase section */
391 | 1369ABC15B27D02392E50C39 /* Headers */ = {
392 | isa = PBXHeadersBuildPhase;
393 | buildActionMask = 2147483647;
394 | files = (
395 | 64F3EDA83E5F65A73365C2EF /* RxOptional.h in Headers */,
396 | );
397 | runOnlyForDeploymentPostprocessing = 0;
398 | };
399 | F47D899323035233F06352E4 /* Headers */ = {
400 | isa = PBXHeadersBuildPhase;
401 | buildActionMask = 2147483647;
402 | files = (
403 | 4712D24B4812B278345EAA6A /* RxOptional.h in Headers */,
404 | );
405 | runOnlyForDeploymentPostprocessing = 0;
406 | };
407 | F7191B77B9B8C819E490277F /* Headers */ = {
408 | isa = PBXHeadersBuildPhase;
409 | buildActionMask = 2147483647;
410 | files = (
411 | D87354414F5364D3F8F18B4E /* RxOptional.h in Headers */,
412 | );
413 | runOnlyForDeploymentPostprocessing = 0;
414 | };
415 | FBD945841902839A4D61E393 /* Headers */ = {
416 | isa = PBXHeadersBuildPhase;
417 | buildActionMask = 2147483647;
418 | files = (
419 | 8207476E41AFF8FCC0D53F8C /* RxOptional.h in Headers */,
420 | );
421 | runOnlyForDeploymentPostprocessing = 0;
422 | };
423 | /* End PBXHeadersBuildPhase section */
424 |
425 | /* Begin PBXNativeTarget section */
426 | 05FC215B00A883816D509533 /* RxOptional watchOS */ = {
427 | isa = PBXNativeTarget;
428 | buildConfigurationList = 586050AEFBCCA9375C08B3AE /* Build configuration list for PBXNativeTarget "RxOptional watchOS" */;
429 | buildPhases = (
430 | 1369ABC15B27D02392E50C39 /* Headers */,
431 | 8A515D8A2EA112793AB4B73C /* Sources */,
432 | C76065511DCCB4F2DCB478B0 /* Frameworks */,
433 | );
434 | buildRules = (
435 | );
436 | dependencies = (
437 | );
438 | name = "RxOptional watchOS";
439 | productName = "RxOptional watchOS";
440 | productReference = CEC38EC84F9C77E55FDD6708 /* RxOptional watchOS.framework */;
441 | productType = "com.apple.product-type.framework";
442 | };
443 | 1CD2B6EA4FA6F3E24B74D63F /* RxOptional tvOS */ = {
444 | isa = PBXNativeTarget;
445 | buildConfigurationList = 5EDBE0EF5462688A5DEFA804 /* Build configuration list for PBXNativeTarget "RxOptional tvOS" */;
446 | buildPhases = (
447 | FBD945841902839A4D61E393 /* Headers */,
448 | 50D4CBC351BCF3FA44BBACB9 /* Sources */,
449 | FA69B763073EB943E50D4C31 /* Frameworks */,
450 | );
451 | buildRules = (
452 | );
453 | dependencies = (
454 | );
455 | name = "RxOptional tvOS";
456 | productName = "RxOptional tvOS";
457 | productReference = 37E304B8E9B54DB2D6281F46 /* RxOptional tvOS.framework */;
458 | productType = "com.apple.product-type.framework";
459 | };
460 | 65A933B3482F525E66DC8D53 /* RxOptionalTests macOS */ = {
461 | isa = PBXNativeTarget;
462 | buildConfigurationList = 1F4539CDF7017ACBF3E5391E /* Build configuration list for PBXNativeTarget "RxOptionalTests macOS" */;
463 | buildPhases = (
464 | D3F741A79BF0F7AA373702EE /* Sources */,
465 | 8BA354BAFBA21B9C59F367EE /* Frameworks */,
466 | 28EE978238BD64741D4C7DB2 /* Embed Frameworks */,
467 | );
468 | buildRules = (
469 | );
470 | dependencies = (
471 | 2F1B3D17AF462A473860DFB6 /* PBXTargetDependency */,
472 | );
473 | name = "RxOptionalTests macOS";
474 | productName = "RxOptionalTests macOS";
475 | productReference = 1B7655DD09E6FBBC65422899 /* RxOptionalTests macOS.xctest */;
476 | productType = "com.apple.product-type.bundle.unit-test";
477 | };
478 | 6A00D0484A59D091E8911045 /* RxOptional macOS */ = {
479 | isa = PBXNativeTarget;
480 | buildConfigurationList = 092EE7FC6ED5AFAAD763CD3C /* Build configuration list for PBXNativeTarget "RxOptional macOS" */;
481 | buildPhases = (
482 | F7191B77B9B8C819E490277F /* Headers */,
483 | 50C07610F38D383D122B8BC7 /* Sources */,
484 | 94D0CDC77A85CB3B73CF4B41 /* Frameworks */,
485 | );
486 | buildRules = (
487 | );
488 | dependencies = (
489 | );
490 | name = "RxOptional macOS";
491 | productName = "RxOptional macOS";
492 | productReference = DA2BA7EDA36C2F7998475CF0 /* RxOptional macOS.framework */;
493 | productType = "com.apple.product-type.framework";
494 | };
495 | 6F69539CB7F6307A6DBF3899 /* RxOptional iOS */ = {
496 | isa = PBXNativeTarget;
497 | buildConfigurationList = 2A649AACAF2F640C63CEF3E7 /* Build configuration list for PBXNativeTarget "RxOptional iOS" */;
498 | buildPhases = (
499 | F47D899323035233F06352E4 /* Headers */,
500 | A8DCCAC1365067F51492EE9F /* Sources */,
501 | CA2DD4BA8907534D073DAA30 /* Frameworks */,
502 | );
503 | buildRules = (
504 | );
505 | dependencies = (
506 | );
507 | name = "RxOptional iOS";
508 | productName = "RxOptional iOS";
509 | productReference = F69BF78978CDB72ED600BBEE /* RxOptional iOS.framework */;
510 | productType = "com.apple.product-type.framework";
511 | };
512 | 7B1875DF13DB304EC80B85DB /* RxOptionalTests iOS */ = {
513 | isa = PBXNativeTarget;
514 | buildConfigurationList = 0D8B4433B4CC9D03F0D32932 /* Build configuration list for PBXNativeTarget "RxOptionalTests iOS" */;
515 | buildPhases = (
516 | CBAC33288F9909852C60862F /* Sources */,
517 | 91572F5C6ED68D2D916DA745 /* Frameworks */,
518 | 641C1BF05BC5334B533DBF62 /* Embed Frameworks */,
519 | );
520 | buildRules = (
521 | );
522 | dependencies = (
523 | 2917A5EB65BE4F3E1A61B3BD /* PBXTargetDependency */,
524 | );
525 | name = "RxOptionalTests iOS";
526 | productName = "RxOptionalTests iOS";
527 | productReference = BF34A8D0BE70F26739BD5097 /* RxOptionalTests iOS.xctest */;
528 | productType = "com.apple.product-type.bundle.unit-test";
529 | };
530 | D04DF7B7DF49D9E0BCCD6327 /* RxOptionalTests tvOS */ = {
531 | isa = PBXNativeTarget;
532 | buildConfigurationList = 586066C3D7B5E1D2E9B15AF8 /* Build configuration list for PBXNativeTarget "RxOptionalTests tvOS" */;
533 | buildPhases = (
534 | F0E682D95555D3DD864631BF /* Sources */,
535 | 4A283B28B5E7758DA08D899C /* Frameworks */,
536 | 33314C03BDAD7CDAD7753EAA /* Embed Frameworks */,
537 | );
538 | buildRules = (
539 | );
540 | dependencies = (
541 | 2C7DAA9FF54F91CA36807480 /* PBXTargetDependency */,
542 | );
543 | name = "RxOptionalTests tvOS";
544 | productName = "RxOptionalTests tvOS";
545 | productReference = D4DD625AF54CF2767D5FAA20 /* RxOptionalTests tvOS.xctest */;
546 | productType = "com.apple.product-type.bundle.unit-test";
547 | };
548 | /* End PBXNativeTarget section */
549 |
550 | /* Begin PBXProject section */
551 | 54001DEDA5CA627B9FD8FD3C /* Project object */ = {
552 | isa = PBXProject;
553 | attributes = {
554 | LastUpgradeCheck = 1230;
555 | ORGANIZATIONNAME = RxSwiftCommunity;
556 | TargetAttributes = {
557 | };
558 | };
559 | buildConfigurationList = D213AF7FE420057F215728B9 /* Build configuration list for PBXProject "RxOptional" */;
560 | compatibilityVersion = "Xcode 10.0";
561 | developmentRegion = en;
562 | hasScannedForEncodings = 0;
563 | knownRegions = (
564 | Base,
565 | en,
566 | );
567 | mainGroup = 8B0E1322337CBD4407AB44CE;
568 | projectDirPath = "";
569 | projectRoot = "";
570 | targets = (
571 | 6F69539CB7F6307A6DBF3899 /* RxOptional iOS */,
572 | 6A00D0484A59D091E8911045 /* RxOptional macOS */,
573 | 1CD2B6EA4FA6F3E24B74D63F /* RxOptional tvOS */,
574 | 05FC215B00A883816D509533 /* RxOptional watchOS */,
575 | 7B1875DF13DB304EC80B85DB /* RxOptionalTests iOS */,
576 | 65A933B3482F525E66DC8D53 /* RxOptionalTests macOS */,
577 | D04DF7B7DF49D9E0BCCD6327 /* RxOptionalTests tvOS */,
578 | );
579 | };
580 | /* End PBXProject section */
581 |
582 | /* Begin PBXSourcesBuildPhase section */
583 | 50C07610F38D383D122B8BC7 /* Sources */ = {
584 | isa = PBXSourcesBuildPhase;
585 | buildActionMask = 2147483647;
586 | files = (
587 | E6B6AC26A338A8887FFC1012 /* Observable+Occupiable.swift in Sources */,
588 | CF2A7F10B6CB312D1FC2103E /* Observable+Optional.swift in Sources */,
589 | C3F7265C293A824E8AE14C96 /* Occupiable.swift in Sources */,
590 | 1764F95CDAB104376D26B7DA /* OptionalType.swift in Sources */,
591 | BAA5F1EE5652A97562AD58D4 /* RxOptionalError.swift in Sources */,
592 | BE7DE589D0C9403DB9E7D9EF /* SharedSequence+Occupiable.swift in Sources */,
593 | 8E6DA53CDD03221981843432 /* SharedSequence+Optional.swift in Sources */,
594 | );
595 | runOnlyForDeploymentPostprocessing = 0;
596 | };
597 | 50D4CBC351BCF3FA44BBACB9 /* Sources */ = {
598 | isa = PBXSourcesBuildPhase;
599 | buildActionMask = 2147483647;
600 | files = (
601 | F8A613756AF9EBEB87C4ECA0 /* Observable+Occupiable.swift in Sources */,
602 | FA7545955B3616E837F6B3CE /* Observable+Optional.swift in Sources */,
603 | 581CF9B17343BA5D37681EA3 /* Occupiable.swift in Sources */,
604 | 5040E5CCAF5942002B74817E /* OptionalType.swift in Sources */,
605 | 3DFF267FDE42DBA93A90363C /* RxOptionalError.swift in Sources */,
606 | CE96D5B0552BF66D099562D6 /* SharedSequence+Occupiable.swift in Sources */,
607 | C666907E86E8335302B10173 /* SharedSequence+Optional.swift in Sources */,
608 | );
609 | runOnlyForDeploymentPostprocessing = 0;
610 | };
611 | 8A515D8A2EA112793AB4B73C /* Sources */ = {
612 | isa = PBXSourcesBuildPhase;
613 | buildActionMask = 2147483647;
614 | files = (
615 | F500B32C301B0D6C6D4F2428 /* Observable+Occupiable.swift in Sources */,
616 | 187FCFE934CFB364A6764F00 /* Observable+Optional.swift in Sources */,
617 | 56FBD7BC7478DB29E609246F /* Occupiable.swift in Sources */,
618 | 419FA8DA0B974EE6CDE14090 /* OptionalType.swift in Sources */,
619 | 9457D1D790D8C6F2DD2A49AC /* RxOptionalError.swift in Sources */,
620 | E666B56802A3C20AB0D486CF /* SharedSequence+Occupiable.swift in Sources */,
621 | D8D6EC702226BABD9D7915DF /* SharedSequence+Optional.swift in Sources */,
622 | );
623 | runOnlyForDeploymentPostprocessing = 0;
624 | };
625 | A8DCCAC1365067F51492EE9F /* Sources */ = {
626 | isa = PBXSourcesBuildPhase;
627 | buildActionMask = 2147483647;
628 | files = (
629 | 661668935F4D9B4A2FBA3FAD /* Observable+Occupiable.swift in Sources */,
630 | 044AA0C99D8038E868604877 /* Observable+Optional.swift in Sources */,
631 | 20651DBEE76021407BCA7E3E /* Occupiable.swift in Sources */,
632 | 9A5EC302705D9D55686AEF70 /* OptionalType.swift in Sources */,
633 | 2C6B194C98F945DC149AB54B /* RxOptionalError.swift in Sources */,
634 | D9FF640FFF56491F6FA2CB47 /* SharedSequence+Occupiable.swift in Sources */,
635 | 673055954AD9043C6BDFAD9C /* SharedSequence+Optional.swift in Sources */,
636 | );
637 | runOnlyForDeploymentPostprocessing = 0;
638 | };
639 | CBAC33288F9909852C60862F /* Sources */ = {
640 | isa = PBXSourcesBuildPhase;
641 | buildActionMask = 2147483647;
642 | files = (
643 | 900DE61BCB0672CD78B1526D /* OccupiableOperatorsTests.swift in Sources */,
644 | 3C6E9708CEFE699C3C6D7661 /* OptionalOperatorsTests.swift in Sources */,
645 | B741B98CCAD36BBBAE0A5185 /* XCTestManifests.swift in Sources */,
646 | );
647 | runOnlyForDeploymentPostprocessing = 0;
648 | };
649 | D3F741A79BF0F7AA373702EE /* Sources */ = {
650 | isa = PBXSourcesBuildPhase;
651 | buildActionMask = 2147483647;
652 | files = (
653 | 886DED726292CFEF6D3BC118 /* OccupiableOperatorsTests.swift in Sources */,
654 | C89EC80689518816E663194C /* OptionalOperatorsTests.swift in Sources */,
655 | 05DA8BB8CFA7523A3B249052 /* XCTestManifests.swift in Sources */,
656 | );
657 | runOnlyForDeploymentPostprocessing = 0;
658 | };
659 | F0E682D95555D3DD864631BF /* Sources */ = {
660 | isa = PBXSourcesBuildPhase;
661 | buildActionMask = 2147483647;
662 | files = (
663 | DF147FDD2285BF53693069B5 /* OccupiableOperatorsTests.swift in Sources */,
664 | 7FD2C379DC54A289596BB700 /* OptionalOperatorsTests.swift in Sources */,
665 | 48D56DC4312CF4F9622EE1EF /* XCTestManifests.swift in Sources */,
666 | );
667 | runOnlyForDeploymentPostprocessing = 0;
668 | };
669 | /* End PBXSourcesBuildPhase section */
670 |
671 | /* Begin PBXTargetDependency section */
672 | 2917A5EB65BE4F3E1A61B3BD /* PBXTargetDependency */ = {
673 | isa = PBXTargetDependency;
674 | target = 6F69539CB7F6307A6DBF3899 /* RxOptional iOS */;
675 | targetProxy = 2183009D206FCBE8C081CD56 /* PBXContainerItemProxy */;
676 | };
677 | 2C7DAA9FF54F91CA36807480 /* PBXTargetDependency */ = {
678 | isa = PBXTargetDependency;
679 | target = 1CD2B6EA4FA6F3E24B74D63F /* RxOptional tvOS */;
680 | targetProxy = 2F4CBEBD0E6A1A4CA12BE919 /* PBXContainerItemProxy */;
681 | };
682 | 2F1B3D17AF462A473860DFB6 /* PBXTargetDependency */ = {
683 | isa = PBXTargetDependency;
684 | target = 6A00D0484A59D091E8911045 /* RxOptional macOS */;
685 | targetProxy = 587E2CAE59202D0A38B9A562 /* PBXContainerItemProxy */;
686 | };
687 | /* End PBXTargetDependency section */
688 |
689 | /* Begin XCBuildConfiguration section */
690 | 1E53E3CD95EE732B757D3DA4 /* Debug */ = {
691 | isa = XCBuildConfiguration;
692 | buildSettings = {
693 | ALWAYS_SEARCH_USER_PATHS = NO;
694 | CLANG_ANALYZER_NONNULL = YES;
695 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
696 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
697 | CLANG_CXX_LIBRARY = "libc++";
698 | CLANG_ENABLE_MODULES = YES;
699 | CLANG_ENABLE_OBJC_ARC = YES;
700 | CLANG_ENABLE_OBJC_WEAK = YES;
701 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
702 | CLANG_WARN_BOOL_CONVERSION = YES;
703 | CLANG_WARN_COMMA = YES;
704 | CLANG_WARN_CONSTANT_CONVERSION = YES;
705 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
706 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
707 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
708 | CLANG_WARN_EMPTY_BODY = YES;
709 | CLANG_WARN_ENUM_CONVERSION = YES;
710 | CLANG_WARN_INFINITE_RECURSION = YES;
711 | CLANG_WARN_INT_CONVERSION = YES;
712 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
713 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
714 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
715 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
716 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
717 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
718 | CLANG_WARN_STRICT_PROTOTYPES = YES;
719 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
720 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
721 | CLANG_WARN_UNREACHABLE_CODE = YES;
722 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
723 | COPY_PHASE_STRIP = NO;
724 | DEBUG_INFORMATION_FORMAT = dwarf;
725 | ENABLE_STRICT_OBJC_MSGSEND = YES;
726 | ENABLE_TESTABILITY = YES;
727 | GCC_C_LANGUAGE_STANDARD = gnu11;
728 | GCC_DYNAMIC_NO_PIC = NO;
729 | GCC_NO_COMMON_BLOCKS = YES;
730 | GCC_OPTIMIZATION_LEVEL = 0;
731 | GCC_PREPROCESSOR_DEFINITIONS = (
732 | "$(inherited)",
733 | "DEBUG=1",
734 | );
735 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
736 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
737 | GCC_WARN_UNDECLARED_SELECTOR = YES;
738 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
739 | GCC_WARN_UNUSED_FUNCTION = YES;
740 | GCC_WARN_UNUSED_VARIABLE = YES;
741 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
742 | MACOSX_DEPLOYMENT_TARGET = 10.10;
743 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
744 | MTL_FAST_MATH = YES;
745 | ONLY_ACTIVE_ARCH = YES;
746 | PRODUCT_NAME = "$(TARGET_NAME)";
747 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
748 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
749 | SWIFT_VERSION = 5.0;
750 | TVOS_DEPLOYMENT_TARGET = 10.0;
751 | WATCHOS_DEPLOYMENT_TARGET = 3.0;
752 | };
753 | name = Debug;
754 | };
755 | 460F1BA73CA5D423D47DD8F1 /* Release */ = {
756 | isa = XCBuildConfiguration;
757 | buildSettings = {
758 | BUNDLE_LOADER = "$(TEST_HOST)";
759 | FRAMEWORK_SEARCH_PATHS = (
760 | "$(inherited)",
761 | "$(PROJECT_DIR)/Carthage/Build/tvOS",
762 | );
763 | LD_RUNPATH_SEARCH_PATHS = (
764 | "$(inherited)",
765 | "@executable_path/Frameworks",
766 | "@loader_path/Frameworks",
767 | );
768 | SDKROOT = appletvos;
769 | TARGETED_DEVICE_FAMILY = 3;
770 | };
771 | name = Release;
772 | };
773 | 53236B28032D121139C35E13 /* Debug */ = {
774 | isa = XCBuildConfiguration;
775 | buildSettings = {
776 | BUNDLE_LOADER = "$(TEST_HOST)";
777 | CODE_SIGN_IDENTITY = "";
778 | COMBINE_HIDPI_IMAGES = YES;
779 | FRAMEWORK_SEARCH_PATHS = (
780 | "$(inherited)",
781 | "$(PROJECT_DIR)/Carthage/Build/Mac",
782 | );
783 | LD_RUNPATH_SEARCH_PATHS = (
784 | "$(inherited)",
785 | "@executable_path/../Frameworks",
786 | "@loader_path/../Frameworks",
787 | );
788 | SDKROOT = macosx;
789 | };
790 | name = Debug;
791 | };
792 | 5EE31B389B1643072F0DBB45 /* Debug */ = {
793 | isa = XCBuildConfiguration;
794 | buildSettings = {
795 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
796 | CODE_SIGN_IDENTITY = "";
797 | CURRENT_PROJECT_VERSION = 1;
798 | DEFINES_MODULE = YES;
799 | DYLIB_COMPATIBILITY_VERSION = 1;
800 | DYLIB_CURRENT_VERSION = 1;
801 | DYLIB_INSTALL_NAME_BASE = "@rpath";
802 | FRAMEWORK_SEARCH_PATHS = (
803 | "$(inherited)",
804 | "$(PROJECT_DIR)/Carthage/Build/tvOS",
805 | );
806 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
807 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
808 | LD_RUNPATH_SEARCH_PATHS = (
809 | "$(inherited)",
810 | "@executable_path/Frameworks",
811 | );
812 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-tvOS";
813 | PRODUCT_NAME = RxOptional;
814 | SDKROOT = appletvos;
815 | SKIP_INSTALL = NO;
816 | TARGETED_DEVICE_FAMILY = 3;
817 | VERSIONING_SYSTEM = "apple-generic";
818 | };
819 | name = Debug;
820 | };
821 | 62F7B06B01B28CC0C587DF5F /* Release */ = {
822 | isa = XCBuildConfiguration;
823 | buildSettings = {
824 | ALWAYS_SEARCH_USER_PATHS = NO;
825 | CLANG_ANALYZER_NONNULL = YES;
826 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
827 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
828 | CLANG_CXX_LIBRARY = "libc++";
829 | CLANG_ENABLE_MODULES = YES;
830 | CLANG_ENABLE_OBJC_ARC = YES;
831 | CLANG_ENABLE_OBJC_WEAK = YES;
832 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
833 | CLANG_WARN_BOOL_CONVERSION = YES;
834 | CLANG_WARN_COMMA = YES;
835 | CLANG_WARN_CONSTANT_CONVERSION = YES;
836 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
837 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
838 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
839 | CLANG_WARN_EMPTY_BODY = YES;
840 | CLANG_WARN_ENUM_CONVERSION = YES;
841 | CLANG_WARN_INFINITE_RECURSION = YES;
842 | CLANG_WARN_INT_CONVERSION = YES;
843 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
844 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
845 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
846 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
847 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
848 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
849 | CLANG_WARN_STRICT_PROTOTYPES = YES;
850 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
851 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
852 | CLANG_WARN_UNREACHABLE_CODE = YES;
853 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
854 | COPY_PHASE_STRIP = NO;
855 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
856 | ENABLE_NS_ASSERTIONS = NO;
857 | ENABLE_STRICT_OBJC_MSGSEND = YES;
858 | GCC_C_LANGUAGE_STANDARD = gnu11;
859 | GCC_NO_COMMON_BLOCKS = YES;
860 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
861 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
862 | GCC_WARN_UNDECLARED_SELECTOR = YES;
863 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
864 | GCC_WARN_UNUSED_FUNCTION = YES;
865 | GCC_WARN_UNUSED_VARIABLE = YES;
866 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
867 | MACOSX_DEPLOYMENT_TARGET = 10.10;
868 | MTL_ENABLE_DEBUG_INFO = NO;
869 | MTL_FAST_MATH = YES;
870 | PRODUCT_NAME = "$(TARGET_NAME)";
871 | SWIFT_COMPILATION_MODE = wholemodule;
872 | SWIFT_OPTIMIZATION_LEVEL = "-O";
873 | SWIFT_VERSION = 5.0;
874 | TVOS_DEPLOYMENT_TARGET = 10.0;
875 | WATCHOS_DEPLOYMENT_TARGET = 3.0;
876 | };
877 | name = Release;
878 | };
879 | 63D5213F45E41CC2131871E1 /* Release */ = {
880 | isa = XCBuildConfiguration;
881 | buildSettings = {
882 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
883 | CODE_SIGN_IDENTITY = "";
884 | CURRENT_PROJECT_VERSION = 1;
885 | DEFINES_MODULE = YES;
886 | DYLIB_COMPATIBILITY_VERSION = 1;
887 | DYLIB_CURRENT_VERSION = 1;
888 | DYLIB_INSTALL_NAME_BASE = "@rpath";
889 | FRAMEWORK_SEARCH_PATHS = (
890 | "$(inherited)",
891 | "$(PROJECT_DIR)/Carthage/Build/iOS",
892 | );
893 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
894 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
895 | LD_RUNPATH_SEARCH_PATHS = (
896 | "$(inherited)",
897 | "@executable_path/Frameworks",
898 | );
899 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-iOS";
900 | PRODUCT_NAME = RxOptional;
901 | SDKROOT = iphoneos;
902 | SKIP_INSTALL = NO;
903 | SUPPORTS_MACCATALYST = NO;
904 | TARGETED_DEVICE_FAMILY = "1,2";
905 | VERSIONING_SYSTEM = "apple-generic";
906 | };
907 | name = Release;
908 | };
909 | 82FA5E0CF9914AFA86F07F8E /* Release */ = {
910 | isa = XCBuildConfiguration;
911 | buildSettings = {
912 | BUNDLE_LOADER = "$(TEST_HOST)";
913 | FRAMEWORK_SEARCH_PATHS = (
914 | "$(inherited)",
915 | "$(PROJECT_DIR)/Carthage/Build/iOS",
916 | );
917 | LD_RUNPATH_SEARCH_PATHS = (
918 | "$(inherited)",
919 | "@executable_path/Frameworks",
920 | "@loader_path/Frameworks",
921 | );
922 | SDKROOT = iphoneos;
923 | TARGETED_DEVICE_FAMILY = "1,2";
924 | };
925 | name = Release;
926 | };
927 | 897EBEABB77CA12FB0626D76 /* Release */ = {
928 | isa = XCBuildConfiguration;
929 | buildSettings = {
930 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
931 | CODE_SIGN_IDENTITY = "";
932 | CURRENT_PROJECT_VERSION = 1;
933 | DEFINES_MODULE = YES;
934 | DYLIB_COMPATIBILITY_VERSION = 1;
935 | DYLIB_CURRENT_VERSION = 1;
936 | DYLIB_INSTALL_NAME_BASE = "@rpath";
937 | FRAMEWORK_SEARCH_PATHS = (
938 | "$(inherited)",
939 | "$(PROJECT_DIR)/Carthage/Build/watchOS",
940 | );
941 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
942 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
943 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-watchOS";
944 | PRODUCT_NAME = RxOptional;
945 | SDKROOT = watchos;
946 | SKIP_INSTALL = NO;
947 | TARGETED_DEVICE_FAMILY = 4;
948 | VERSIONING_SYSTEM = "apple-generic";
949 | };
950 | name = Release;
951 | };
952 | 9CB6F0272CE9CD5F006D986B /* Debug */ = {
953 | isa = XCBuildConfiguration;
954 | buildSettings = {
955 | BUNDLE_LOADER = "$(TEST_HOST)";
956 | FRAMEWORK_SEARCH_PATHS = (
957 | "$(inherited)",
958 | "$(PROJECT_DIR)/Carthage/Build/tvOS",
959 | );
960 | LD_RUNPATH_SEARCH_PATHS = (
961 | "$(inherited)",
962 | "@executable_path/Frameworks",
963 | "@loader_path/Frameworks",
964 | );
965 | SDKROOT = appletvos;
966 | TARGETED_DEVICE_FAMILY = 3;
967 | };
968 | name = Debug;
969 | };
970 | A1F5CB27FEAA15D6C7A4178E /* Debug */ = {
971 | isa = XCBuildConfiguration;
972 | buildSettings = {
973 | BUNDLE_LOADER = "$(TEST_HOST)";
974 | FRAMEWORK_SEARCH_PATHS = (
975 | "$(inherited)",
976 | "$(PROJECT_DIR)/Carthage/Build/iOS",
977 | );
978 | LD_RUNPATH_SEARCH_PATHS = (
979 | "$(inherited)",
980 | "@executable_path/Frameworks",
981 | "@loader_path/Frameworks",
982 | );
983 | SDKROOT = iphoneos;
984 | TARGETED_DEVICE_FAMILY = "1,2";
985 | };
986 | name = Debug;
987 | };
988 | B323C6ADF92AE0012115869E /* Release */ = {
989 | isa = XCBuildConfiguration;
990 | buildSettings = {
991 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
992 | CODE_SIGN_IDENTITY = "";
993 | COMBINE_HIDPI_IMAGES = YES;
994 | CURRENT_PROJECT_VERSION = 1;
995 | DEFINES_MODULE = YES;
996 | DYLIB_COMPATIBILITY_VERSION = 1;
997 | DYLIB_CURRENT_VERSION = 1;
998 | DYLIB_INSTALL_NAME_BASE = "@rpath";
999 | FRAMEWORK_SEARCH_PATHS = (
1000 | "$(inherited)",
1001 | "$(PROJECT_DIR)/Carthage/Build/Mac",
1002 | );
1003 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
1004 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1005 | LD_RUNPATH_SEARCH_PATHS = (
1006 | "$(inherited)",
1007 | "@executable_path/../Frameworks",
1008 | );
1009 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-macOS";
1010 | PRODUCT_NAME = RxOptional;
1011 | SDKROOT = macosx;
1012 | SKIP_INSTALL = NO;
1013 | VERSIONING_SYSTEM = "apple-generic";
1014 | };
1015 | name = Release;
1016 | };
1017 | B9ACD980DA8916BE21A58FC8 /* Debug */ = {
1018 | isa = XCBuildConfiguration;
1019 | buildSettings = {
1020 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
1021 | CODE_SIGN_IDENTITY = "";
1022 | CURRENT_PROJECT_VERSION = 1;
1023 | DEFINES_MODULE = YES;
1024 | DYLIB_COMPATIBILITY_VERSION = 1;
1025 | DYLIB_CURRENT_VERSION = 1;
1026 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1027 | FRAMEWORK_SEARCH_PATHS = (
1028 | "$(inherited)",
1029 | "$(PROJECT_DIR)/Carthage/Build/iOS",
1030 | );
1031 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
1032 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1033 | LD_RUNPATH_SEARCH_PATHS = (
1034 | "$(inherited)",
1035 | "@executable_path/Frameworks",
1036 | );
1037 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-iOS";
1038 | PRODUCT_NAME = RxOptional;
1039 | SDKROOT = iphoneos;
1040 | SKIP_INSTALL = NO;
1041 | SUPPORTS_MACCATALYST = NO;
1042 | TARGETED_DEVICE_FAMILY = "1,2";
1043 | VERSIONING_SYSTEM = "apple-generic";
1044 | };
1045 | name = Debug;
1046 | };
1047 | D8E8E4D1945D118E1E8C54E4 /* Release */ = {
1048 | isa = XCBuildConfiguration;
1049 | buildSettings = {
1050 | BUNDLE_LOADER = "$(TEST_HOST)";
1051 | CODE_SIGN_IDENTITY = "";
1052 | COMBINE_HIDPI_IMAGES = YES;
1053 | FRAMEWORK_SEARCH_PATHS = (
1054 | "$(inherited)",
1055 | "$(PROJECT_DIR)/Carthage/Build/Mac",
1056 | );
1057 | LD_RUNPATH_SEARCH_PATHS = (
1058 | "$(inherited)",
1059 | "@executable_path/../Frameworks",
1060 | "@loader_path/../Frameworks",
1061 | );
1062 | SDKROOT = macosx;
1063 | };
1064 | name = Release;
1065 | };
1066 | DF87BEC29C8610C912261F1A /* Debug */ = {
1067 | isa = XCBuildConfiguration;
1068 | buildSettings = {
1069 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
1070 | CODE_SIGN_IDENTITY = "";
1071 | CURRENT_PROJECT_VERSION = 1;
1072 | DEFINES_MODULE = YES;
1073 | DYLIB_COMPATIBILITY_VERSION = 1;
1074 | DYLIB_CURRENT_VERSION = 1;
1075 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1076 | FRAMEWORK_SEARCH_PATHS = (
1077 | "$(inherited)",
1078 | "$(PROJECT_DIR)/Carthage/Build/watchOS",
1079 | );
1080 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
1081 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1082 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-watchOS";
1083 | PRODUCT_NAME = RxOptional;
1084 | SDKROOT = watchos;
1085 | SKIP_INSTALL = NO;
1086 | TARGETED_DEVICE_FAMILY = 4;
1087 | VERSIONING_SYSTEM = "apple-generic";
1088 | };
1089 | name = Debug;
1090 | };
1091 | E834288DC5EC9EB264B1D101 /* Release */ = {
1092 | isa = XCBuildConfiguration;
1093 | buildSettings = {
1094 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
1095 | CODE_SIGN_IDENTITY = "";
1096 | CURRENT_PROJECT_VERSION = 1;
1097 | DEFINES_MODULE = YES;
1098 | DYLIB_COMPATIBILITY_VERSION = 1;
1099 | DYLIB_CURRENT_VERSION = 1;
1100 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1101 | FRAMEWORK_SEARCH_PATHS = (
1102 | "$(inherited)",
1103 | "$(PROJECT_DIR)/Carthage/Build/tvOS",
1104 | );
1105 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
1106 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1107 | LD_RUNPATH_SEARCH_PATHS = (
1108 | "$(inherited)",
1109 | "@executable_path/Frameworks",
1110 | );
1111 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-tvOS";
1112 | PRODUCT_NAME = RxOptional;
1113 | SDKROOT = appletvos;
1114 | SKIP_INSTALL = NO;
1115 | TARGETED_DEVICE_FAMILY = 3;
1116 | VERSIONING_SYSTEM = "apple-generic";
1117 | };
1118 | name = Release;
1119 | };
1120 | F07D0CB410D449E2B5D99E6E /* Debug */ = {
1121 | isa = XCBuildConfiguration;
1122 | buildSettings = {
1123 | BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
1124 | CODE_SIGN_IDENTITY = "";
1125 | COMBINE_HIDPI_IMAGES = YES;
1126 | CURRENT_PROJECT_VERSION = 1;
1127 | DEFINES_MODULE = YES;
1128 | DYLIB_COMPATIBILITY_VERSION = 1;
1129 | DYLIB_CURRENT_VERSION = 1;
1130 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1131 | FRAMEWORK_SEARCH_PATHS = (
1132 | "$(inherited)",
1133 | "$(PROJECT_DIR)/Carthage/Build/Mac",
1134 | );
1135 | INFOPLIST_FILE = "Sources/RxOptional/Supporting Files/Info.plist";
1136 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1137 | LD_RUNPATH_SEARCH_PATHS = (
1138 | "$(inherited)",
1139 | "@executable_path/../Frameworks",
1140 | );
1141 | PRODUCT_BUNDLE_IDENTIFIER = "RxSwiftCommunity.RxOptional.RxOptional-macOS";
1142 | PRODUCT_NAME = RxOptional;
1143 | SDKROOT = macosx;
1144 | SKIP_INSTALL = NO;
1145 | VERSIONING_SYSTEM = "apple-generic";
1146 | };
1147 | name = Debug;
1148 | };
1149 | /* End XCBuildConfiguration section */
1150 |
1151 | /* Begin XCConfigurationList section */
1152 | 092EE7FC6ED5AFAAD763CD3C /* Build configuration list for PBXNativeTarget "RxOptional macOS" */ = {
1153 | isa = XCConfigurationList;
1154 | buildConfigurations = (
1155 | F07D0CB410D449E2B5D99E6E /* Debug */,
1156 | B323C6ADF92AE0012115869E /* Release */,
1157 | );
1158 | defaultConfigurationIsVisible = 0;
1159 | defaultConfigurationName = Release;
1160 | };
1161 | 0D8B4433B4CC9D03F0D32932 /* Build configuration list for PBXNativeTarget "RxOptionalTests iOS" */ = {
1162 | isa = XCConfigurationList;
1163 | buildConfigurations = (
1164 | A1F5CB27FEAA15D6C7A4178E /* Debug */,
1165 | 82FA5E0CF9914AFA86F07F8E /* Release */,
1166 | );
1167 | defaultConfigurationIsVisible = 0;
1168 | defaultConfigurationName = Release;
1169 | };
1170 | 1F4539CDF7017ACBF3E5391E /* Build configuration list for PBXNativeTarget "RxOptionalTests macOS" */ = {
1171 | isa = XCConfigurationList;
1172 | buildConfigurations = (
1173 | 53236B28032D121139C35E13 /* Debug */,
1174 | D8E8E4D1945D118E1E8C54E4 /* Release */,
1175 | );
1176 | defaultConfigurationIsVisible = 0;
1177 | defaultConfigurationName = Release;
1178 | };
1179 | 2A649AACAF2F640C63CEF3E7 /* Build configuration list for PBXNativeTarget "RxOptional iOS" */ = {
1180 | isa = XCConfigurationList;
1181 | buildConfigurations = (
1182 | B9ACD980DA8916BE21A58FC8 /* Debug */,
1183 | 63D5213F45E41CC2131871E1 /* Release */,
1184 | );
1185 | defaultConfigurationIsVisible = 0;
1186 | defaultConfigurationName = Release;
1187 | };
1188 | 586050AEFBCCA9375C08B3AE /* Build configuration list for PBXNativeTarget "RxOptional watchOS" */ = {
1189 | isa = XCConfigurationList;
1190 | buildConfigurations = (
1191 | DF87BEC29C8610C912261F1A /* Debug */,
1192 | 897EBEABB77CA12FB0626D76 /* Release */,
1193 | );
1194 | defaultConfigurationIsVisible = 0;
1195 | defaultConfigurationName = Release;
1196 | };
1197 | 586066C3D7B5E1D2E9B15AF8 /* Build configuration list for PBXNativeTarget "RxOptionalTests tvOS" */ = {
1198 | isa = XCConfigurationList;
1199 | buildConfigurations = (
1200 | 9CB6F0272CE9CD5F006D986B /* Debug */,
1201 | 460F1BA73CA5D423D47DD8F1 /* Release */,
1202 | );
1203 | defaultConfigurationIsVisible = 0;
1204 | defaultConfigurationName = Release;
1205 | };
1206 | 5EDBE0EF5462688A5DEFA804 /* Build configuration list for PBXNativeTarget "RxOptional tvOS" */ = {
1207 | isa = XCConfigurationList;
1208 | buildConfigurations = (
1209 | 5EE31B389B1643072F0DBB45 /* Debug */,
1210 | E834288DC5EC9EB264B1D101 /* Release */,
1211 | );
1212 | defaultConfigurationIsVisible = 0;
1213 | defaultConfigurationName = Release;
1214 | };
1215 | D213AF7FE420057F215728B9 /* Build configuration list for PBXProject "RxOptional" */ = {
1216 | isa = XCConfigurationList;
1217 | buildConfigurations = (
1218 | 1E53E3CD95EE732B757D3DA4 /* Debug */,
1219 | 62F7B06B01B28CC0C587DF5F /* Release */,
1220 | );
1221 | defaultConfigurationIsVisible = 0;
1222 | defaultConfigurationName = Release;
1223 | };
1224 | /* End XCConfigurationList section */
1225 | };
1226 | rootObject = 54001DEDA5CA627B9FD8FD3C /* Project object */;
1227 | }
1228 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/xcshareddata/xcschemes/RxOptional iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
46 |
47 |
49 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
80 |
81 |
87 |
88 |
89 |
90 |
91 |
92 |
98 |
100 |
106 |
107 |
108 |
109 |
110 |
111 |
113 |
114 |
117 |
118 |
119 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/xcshareddata/xcschemes/RxOptional macOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
46 |
47 |
49 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
80 |
81 |
87 |
88 |
89 |
90 |
91 |
92 |
98 |
100 |
106 |
107 |
108 |
109 |
110 |
111 |
113 |
114 |
117 |
118 |
119 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/xcshareddata/xcschemes/RxOptional tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
46 |
47 |
49 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
80 |
81 |
87 |
88 |
89 |
90 |
91 |
92 |
98 |
100 |
106 |
107 |
108 |
109 |
110 |
111 |
113 |
114 |
117 |
118 |
119 |
--------------------------------------------------------------------------------
/RxOptional.xcodeproj/xcshareddata/xcschemes/RxOptional watchOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
40 |
41 |
42 |
43 |
53 |
54 |
60 |
61 |
62 |
63 |
64 |
65 |
71 |
73 |
79 |
80 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/RxOptionalExample.playground/Contents.swift:
--------------------------------------------------------------------------------
1 | import RxCocoa
2 | import RxOptional
3 | import RxSwift
4 |
5 | public func example(description: String, action: () -> Void) {
6 | print("\n--- \(description) example ---")
7 | action()
8 | }
9 |
10 | // : All operators are also available on `Driver`, unless otherwise noted.
11 |
12 | // : ## Optionals
13 |
14 | example("filterNil") {
15 | _ = Observable
16 | .of("One", nil, "Three")
17 | .filterNil()
18 | // Type is now Observable
19 | .subscribe { print($0) }
20 | }
21 |
22 | example("replaceNilWith") {
23 | _ = Observable
24 | .of("One", nil, "Three")
25 | .replaceNilWith("Two")
26 | // Type is now Observable
27 | .subscribe { print($0) }
28 | }
29 |
30 | #if !swift(>=3.3) || (swift(>=4.0) && !swift(>=4.1))
31 | example("distinctUntilChanged") {
32 | _ = Observable
33 | .of(5, 6, 6, nil, nil, 3)
34 | .distinctUntilChanged()
35 | .subscribe { print($0) }
36 | }
37 | #endif
38 |
39 | /*:
40 | Unavailable on `Driver`, because `Driver`s cannot error out.
41 |
42 | By default, errors with `RxOptionalError.FoundNilWhileUnwrappingOptional`.
43 | */
44 | example("errorOnNil") {
45 | _ = Observable
46 | .of("One", nil, "Three")
47 | .errorOnNil()
48 | // Type is now Observable
49 | .subscribe { print($0) }
50 | }
51 |
52 | example("catchOnNil") {
53 | _ = Observable
54 | .of("One", nil, "Three")
55 | .catchOnNil {
56 | Observable.just("A String from a new Observable")
57 | }
58 | // Type is now Observable
59 | .subscribe { print($0) }
60 | }
61 |
62 | // : ## Occupilables
63 |
64 | example("filterEmpty") {
65 | _ = Observable<[String]>
66 | .of(["Single Element"], [], ["Two", "Elements"])
67 | .filterEmpty()
68 | .subscribe { print($0) }
69 | }
70 |
71 | /*:
72 | Unavailable on `Driver`, because `Driver`s cannot error out.
73 |
74 | By default, errors with `RxOptionalError.EmptyOccupiable`.
75 | */
76 | example("errorOnEmpty") {
77 | _ = Observable<[String]>
78 | .of(["Single Element"], [], ["Two", "Elements"])
79 | .errorOnEmpty()
80 | .subscribe { print($0) }
81 | }
82 |
83 | example("catchOnEmpty") {
84 | _ = Observable<[String]>
85 | .of(["Single Element"], [], ["Two", "Elements"])
86 | .catchOnEmpty {
87 | Observable<[String]>.just(["Not Empty"])
88 | }
89 | .subscribe { print($0) }
90 | }
91 |
--------------------------------------------------------------------------------
/RxOptionalExample.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Sources/RxOptional/Observable+Occupiable.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import RxSwift
3 |
4 | public extension ObservableType where Element: Occupiable {
5 | /**
6 | Filter out empty occupiable elements.
7 |
8 | - returns: `Observable` of source `Observable`'s occupiable elements, with empty occupiable elements filtered out.
9 | */
10 |
11 | func filterEmpty() -> Observable {
12 | return flatMap { element -> Observable in
13 | guard element.isNotEmpty else {
14 | return Observable.empty()
15 | }
16 | return Observable.just(element)
17 | }
18 | }
19 |
20 | /**
21 | Replaces empty occupiable elements with result returned by `handler`.
22 |
23 | - parameter handler: empty handler throwing function that returns `Observable` of non-empty occupiable elements.
24 |
25 | - returns: `Observable` of the source `Observable`'s occupiable elements, with empty occupiable elements replaced by the handler's returned non-empty occupiable elements.
26 | */
27 |
28 | func catchOnEmpty(_ handler: @escaping () throws -> Observable) -> Observable {
29 | return flatMap { element -> Observable in
30 | guard element.isNotEmpty else {
31 | return try handler()
32 | }
33 | return Observable.just(element)
34 | }
35 | }
36 |
37 | /**
38 | Throws an error if the source `Observable` contains an empty occupiable element; otherwise returns original source `Observable` of non-empty occupiable elements.
39 |
40 | - parameter error: error to throw when an empty occupiable element is encountered. Defaults to `RxOptionalError.EmptyOccupiable`.
41 |
42 | - throws: `error` if an empty occupiable element is encountered.
43 |
44 | - returns: original source `Observable` of non-empty occupiable elements if it contains no empty occupiable elements.
45 | */
46 |
47 | func errorOnEmpty(_ error: Error = RxOptionalError.emptyOccupiable(Element.self)) -> Observable {
48 | return map { element in
49 | guard element.isNotEmpty else {
50 | throw error
51 | }
52 | return element
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/Sources/RxOptional/Observable+Optional.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import RxSwift
3 |
4 | // Some code originally from here: https://github.com/artsy/eidolon/blob/24e36a69bbafb4ef6dbe4d98b575ceb4e1d8345f/Kiosk/Observable%2BOperators.swift#L42-L62
5 | // Credit to Artsy and @ashfurrow
6 |
7 | public extension ObservableType where Element: OptionalType {
8 | /**
9 | Unwraps and filters out `nil` elements.
10 |
11 | - returns: `Observable` of source `Observable`'s elements, with `nil` elements filtered out.
12 | */
13 |
14 | func filterNil() -> Observable {
15 | return flatMap { element -> Observable in
16 | guard let value = element.value else {
17 | return Observable.empty()
18 | }
19 | return Observable.just(value)
20 | }
21 | }
22 |
23 | /**
24 |
25 | Filters out `nil` elements. Similar to `filterNil`, but keeps the elements of the observable
26 | wrapped in Optionals. This is often useful for binding to a UIBindingObserver with an optional type.
27 |
28 | - returns: `Observable` of source `Observable`'s elements, with `nil` elements filtered out.
29 | */
30 |
31 | func filterNilKeepOptional() -> Observable {
32 | return filter { element -> Bool in
33 | element.value != nil
34 | }
35 | }
36 |
37 | /**
38 | Throws an error if the source `Observable` contains an empty element; otherwise returns original source `Observable` of non-empty elements.
39 |
40 | - parameter error: error to throw when an empty element is encountered. Defaults to `RxOptionalError.FoundNilWhileUnwrappingOptional`.
41 |
42 | - throws: `error` if an empty element is encountered.
43 |
44 | - returns: original source `Observable` of non-empty elements if it contains no empty elements.
45 | */
46 |
47 | func errorOnNil(_ error: Error = RxOptionalError.foundNilWhileUnwrappingOptional(Element.self)) -> Observable {
48 | return map { element -> Element.Wrapped in
49 | guard let value = element.value else {
50 | throw error
51 | }
52 | return value
53 | }
54 | }
55 |
56 | /**
57 | Unwraps optional elements and replaces `nil` elements with `valueOnNil`.
58 |
59 | - parameter valueOnNil: value to use when `nil` is encountered.
60 |
61 | - returns: `Observable` of the source `Observable`'s unwrapped elements, with `nil` elements replaced by `valueOnNil`.
62 | */
63 |
64 | func replaceNilWith(_ valueOnNil: Element.Wrapped) -> Observable {
65 | return map { element -> Element.Wrapped in
66 | guard let value = element.value else {
67 | return valueOnNil
68 | }
69 | return value
70 | }
71 | }
72 |
73 | /**
74 | Unwraps optional elements and replaces `nil` elements with result returned by `handler`.
75 |
76 | - parameter handler: `nil` handler throwing function that returns `Observable` of non-`nil` elements.
77 |
78 | - returns: `Observable` of the source `Observable`'s unwrapped elements, with `nil` elements replaced by the handler's returned non-`nil` elements.
79 | */
80 |
81 | func catchOnNil(_ handler: @escaping () throws -> Observable) -> Observable {
82 | return flatMap { element -> Observable in
83 | guard let value = element.value else {
84 | return try handler()
85 | }
86 | return Observable.just(value)
87 | }
88 | }
89 | }
90 |
91 | #if !swift(>=3.3) || (swift(>=4.0) && !swift(>=4.1))
92 | public extension ObservableType where Element: OptionalType, Element.Wrapped: Equatable {
93 | /**
94 | Returns an observable sequence that contains only distinct contiguous elements according to equality operator.
95 |
96 | - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html)
97 |
98 | - returns: An observable sequence only containing the distinct contiguous elements, based on equality operator, from the source sequence.
99 | */
100 |
101 | func distinctUntilChanged() -> Observable {
102 | return distinctUntilChanged { (lhs, rhs) -> Bool in
103 | lhs.value == rhs.value
104 | }
105 | }
106 | }
107 | #endif
108 |
--------------------------------------------------------------------------------
/Sources/RxOptional/Occupiable.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | // Originally from here: https://github.com/artsy/eidolon/blob/f95c0a5bf1e90358320529529d6bf431ada04c3f/Kiosk/App/SwiftExtensions.swift#L23-L40
4 | // Credit to Artsy and @ashfurrow
5 |
6 | // Anything that can hold a value (strings, arrays, etc.)
7 | public protocol Occupiable {
8 | var isEmpty: Bool { get }
9 | var isNotEmpty: Bool { get }
10 | }
11 |
12 | public extension Occupiable {
13 | var isNotEmpty: Bool {
14 | return !isEmpty
15 | }
16 | }
17 |
18 | extension String: Occupiable {}
19 | // I can't think of a way to combine these collection types. Suggestions welcomed!
20 | extension Array: Occupiable {}
21 | extension Dictionary: Occupiable {}
22 | extension Set: Occupiable {}
23 |
--------------------------------------------------------------------------------
/Sources/RxOptional/OptionalType.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | // Originally from here: https://github.com/artsy/eidolon/blob/24e36a69bbafb4ef6dbe4d98b575ceb4e1d8345f/Kiosk/Observable%2BOperators.swift#L30-L40
4 | // Credit to Artsy and @ashfurrow
5 |
6 | public protocol OptionalType {
7 | associatedtype Wrapped
8 | var value: Wrapped? { get }
9 | }
10 |
11 | extension Optional: OptionalType {
12 | /// Cast `Optional` to `Wrapped?`
13 | public var value: Wrapped? {
14 | return self
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Sources/RxOptional/RxOptionalError.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public enum RxOptionalError: Error, CustomStringConvertible {
4 | case foundNilWhileUnwrappingOptional(Any.Type)
5 | case emptyOccupiable(Any.Type)
6 |
7 | public var description: String {
8 | switch self {
9 | case let .foundNilWhileUnwrappingOptional(type):
10 | return "Found nil while trying to unwrap type <\(String(describing: type))>"
11 | case let .emptyOccupiable(type):
12 | return "Empty occupiable of type <\(String(describing: type))>"
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Sources/RxOptional/SharedSequence+Occupiable.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import RxCocoa
3 |
4 | public extension SharedSequenceConvertibleType where Element: Occupiable {
5 | /**
6 | Filters out empty elements.
7 |
8 | - returns: `Driver` of source `Driver`'s elements, with empty elements filtered out.
9 | */
10 |
11 | func filterEmpty() -> SharedSequence {
12 | return flatMap { element -> SharedSequence in
13 | guard element.isNotEmpty else {
14 | return SharedSequence.empty()
15 | }
16 | return SharedSequence.just(element)
17 | }
18 | }
19 |
20 | /**
21 | Replaces empty elements with result returned by `handler`.
22 |
23 | - parameter handler: empty handler function that returns `Driver` of non-empty elements.
24 |
25 | - returns: `Driver` of the source `Driver`'s elements, with empty elements replaced by the handler's returned non-empty elements.
26 | */
27 |
28 | func catchOnEmpty(_ handler: @escaping () -> SharedSequence) -> SharedSequence {
29 | return flatMap { element -> SharedSequence in
30 | guard element.isNotEmpty else {
31 | return handler()
32 | }
33 | return SharedSequence.just(element)
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Sources/RxOptional/SharedSequence+Optional.swift:
--------------------------------------------------------------------------------
1 | import RxCocoa
2 |
3 | public extension SharedSequenceConvertibleType where Element: OptionalType {
4 | /**
5 | Unwraps and filters out `nil` elements.
6 |
7 | - returns: `Driver` of source `Driver`'s elements, with `nil` elements filtered out.
8 | */
9 |
10 | func filterNil() -> SharedSequence {
11 | return flatMap { element -> SharedSequence in
12 | guard let value = element.value else {
13 | return SharedSequence.empty()
14 | }
15 | return SharedSequence.just(value)
16 | }
17 | }
18 |
19 | /**
20 | Unwraps optional elements and replaces `nil` elements with `valueOnNil`.
21 |
22 | - parameter valueOnNil: value to use when `nil` is encountered.
23 |
24 | - returns: `Driver` of the source `Driver`'s unwrapped elements, with `nil` elements replaced by `valueOnNil`.
25 | */
26 |
27 | func replaceNilWith(_ valueOnNil: Element.Wrapped) -> SharedSequence {
28 | return map { element -> Element.Wrapped in
29 | guard let value = element.value else {
30 | return valueOnNil
31 | }
32 | return value
33 | }
34 | }
35 |
36 | /**
37 | Unwraps optional elements and replaces `nil` elements with result returned by `handler`.
38 |
39 | - parameter handler: `nil` handler function that returns `Driver` of non-`nil` elements.
40 |
41 | - returns: `Driver` of the source `Driver`'s unwrapped elements, with `nil` elements replaced by the handler's returned non-`nil` elements.
42 | */
43 |
44 | func catchOnNil(_ handler: @escaping () -> SharedSequence) -> SharedSequence {
45 | return flatMap { element -> SharedSequence in
46 | guard let value = element.value else {
47 | return handler()
48 | }
49 | return SharedSequence.just(value)
50 | }
51 | }
52 | }
53 |
54 | #if !swift(>=3.3) || (swift(>=4.0) && !swift(>=4.1))
55 | public extension SharedSequenceConvertibleType where Element: OptionalType, Element.Wrapped: Equatable {
56 | /**
57 | Returns an observable sequence that contains only distinct contiguous elements according to equality operator.
58 |
59 | - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html)
60 |
61 | - returns: An observable sequence only containing the distinct contiguous elements, based on equality operator, from the source sequence.
62 | */
63 |
64 | func distinctUntilChanged() -> SharedSequence {
65 | return distinctUntilChanged { (lhs, rhs) -> Bool in
66 | lhs.value == rhs.value
67 | }
68 | }
69 | }
70 | #endif
71 |
--------------------------------------------------------------------------------
/Sources/RxOptional/Supporting Files/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 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Sources/RxOptional/Supporting Files/RxOptional.h:
--------------------------------------------------------------------------------
1 | //
2 | // RxOptional.h
3 | // RxOptional
4 | //
5 | // Created by muukii on 9/19/16.
6 | // Copyright © 2016 muukii. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for RxOptional.
12 | FOUNDATION_EXPORT double RxOptionalVersionNumber;
13 |
14 | //! Project version string for RxOptional.
15 | FOUNDATION_EXPORT const unsigned char RxOptionalVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import RxOptionalTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += RxOptionalTests.__allTests()
7 |
8 | XCTMain(tests)
9 |
--------------------------------------------------------------------------------
/Tests/RxOptionalTests/OccupiableOperatorsTests.swift:
--------------------------------------------------------------------------------
1 | import Nimble
2 | import Quick
3 | import RxCocoa
4 | import RxOptional
5 | import RxSwift
6 |
7 | class OccupiableOperatorsSpec: QuickSpec {
8 | override func spec() {
9 | describe("filterEmpty") {
10 | context("Observable") {
11 | it("filters out empty arrays") {
12 | Observable<[Int]>
13 | .of([1], [], [3, 4], [5])
14 | .filterEmpty()
15 | .toArray()
16 | .subscribe(onSuccess: {
17 | expect($0[0]).to(equal([1]))
18 | expect($0[1]).to(equal([3, 4]))
19 | expect($0[2]).to(equal([5]))
20 | })
21 | .dispose()
22 | }
23 |
24 | it("filters out empty strings") {
25 | Observable
26 | .of("one", "", "three", "four")
27 | .filterEmpty()
28 | .toArray()
29 | .subscribe(onSuccess: {
30 | expect($0).to(equal(["one", "three", "four"]))
31 | })
32 | .dispose()
33 | }
34 | }
35 |
36 | context("Driver") {
37 | it("filters out empty arrays") {
38 | Driver<[Int]>
39 | .of([1], [], [3, 4], [5])
40 | .filterEmpty()
41 | .asObservable()
42 | .toArray()
43 | .subscribe(onSuccess: {
44 | expect($0[0]).to(equal([1]))
45 | expect($0[1]).to(equal([3, 4]))
46 | expect($0[2]).to(equal([5]))
47 | })
48 | .dispose()
49 | }
50 |
51 | it("filters out empty strings") {
52 | Driver
53 | .of("one", "", "three", "four")
54 | .filterEmpty()
55 | .asObservable()
56 | .toArray()
57 | .subscribe(onSuccess: {
58 | expect($0).to(equal(["one", "three", "four"]))
59 | })
60 | .dispose()
61 | }
62 | }
63 | }
64 |
65 | describe("catchOnEmpty") {
66 | context("Observable") {
67 | it("emits default error") {
68 | Observable<[Int]>
69 | .of([1], [], [3, 4], [5])
70 | .catchOnEmpty {
71 | Observable<[Int]>.just([2])
72 | }
73 | .toArray()
74 | .subscribe(onSuccess: {
75 | expect($0[0]).to(equal([1]))
76 | expect($0[1]).to(equal([2]))
77 | expect($0[2]).to(equal([3, 4]))
78 | expect($0[3]).to(equal([5]))
79 | })
80 | .dispose()
81 | }
82 | }
83 |
84 | context("Driver") {
85 | Driver<[Int]>
86 | .of([1], [], [3, 4], [5])
87 | .catchOnEmpty {
88 | Driver<[Int]>.just([2])
89 | }
90 | .asObservable()
91 | .toArray()
92 | .subscribe(onSuccess: {
93 | expect($0[0]).to(equal([1]))
94 | expect($0[1]).to(equal([2]))
95 | expect($0[2]).to(equal([3, 4]))
96 | expect($0[3]).to(equal([5]))
97 | })
98 | .dispose()
99 | }
100 | }
101 |
102 | describe("errorOnEmpty") {
103 | context("Observable") {
104 | Observable<[Int]>
105 | .of([1], [], [3, 4], [5])
106 | .errorOnEmpty()
107 | .toArray()
108 | .subscribe { event in
109 | switch event {
110 | case let .success(element):
111 | expect(element[0]).to(equal([1]))
112 | expect(element[1]).to(equal([3, 4]))
113 | expect(element[2]).to(equal([5]))
114 | case let .failure(error):
115 | // FIXME: There should be a better way to do this and to check a more specific error.
116 | expect { throw error }
117 | .to(throwError(errorType: RxOptionalError.self))
118 | }
119 | }
120 | .dispose()
121 | }
122 | }
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/Tests/RxOptionalTests/OptionalOperatorsTests.swift:
--------------------------------------------------------------------------------
1 | import Nimble
2 | import Quick
3 | import RxCocoa
4 | import RxOptional
5 | import RxSwift
6 |
7 | class OptionalOperatorsSpec: QuickSpec {
8 | override func spec() {
9 | describe("filterNil") {
10 | context("Observable") {
11 | it("unwraps the optional") {
12 | // Check on compile
13 | let _: Observable = Observable
14 | .just(nil)
15 | .filterNil()
16 | }
17 |
18 | it("filters nil values") {
19 | Observable
20 | .of(1, nil, 3, 4)
21 | .filterNil()
22 | .toArray()
23 | .subscribe(onSuccess: {
24 | expect($0).to(equal([1, 3, 4]))
25 | })
26 | .dispose()
27 | }
28 |
29 | it("filters nil values and keeps types") {
30 | Observable
31 | .of(1, nil, 3, 4)
32 | .filterNilKeepOptional()
33 | .toArray()
34 | .subscribe(onSuccess: {
35 | expect($0).to(equal([1, 3, 4]))
36 | })
37 | .dispose()
38 | }
39 | }
40 |
41 | context("Driver") {
42 | it("unwraps the optional") {
43 | // Check on compile
44 | let _: Driver = Driver
45 | .just(nil)
46 | .filterNil()
47 | }
48 |
49 | it("filters nil values") {
50 | Driver
51 | .of(1, nil, 3, 4)
52 | .filterNil()
53 | .asObservable()
54 | .toArray()
55 | .subscribe(onSuccess: {
56 | expect($0).to(equal([1, 3, 4]))
57 | })
58 | .dispose()
59 | }
60 | }
61 |
62 | context("Signal") {
63 | it("unwraps the optional") {
64 | // Check on compile
65 | let _: Signal = Signal
66 | .just(nil)
67 | .filterNil()
68 | }
69 |
70 | it("filters nil values") {
71 | Signal
72 | .of(1, nil, 3, 4)
73 | .filterNil()
74 | .asObservable()
75 | .toArray()
76 | .subscribe(onSuccess: {
77 | expect($0).to(equal([1, 3, 4]))
78 | })
79 | .dispose()
80 | }
81 | }
82 | }
83 |
84 | describe("Error On Nil") {
85 | context("Observable") {
86 | it("unwraps the optional") {
87 | // Check on compile
88 | let _: Observable = Observable
89 | .just(nil)
90 | .errorOnNil()
91 | }
92 |
93 | it("throws default error") {
94 | Observable
95 | .of(1, nil, 3, 4)
96 | .errorOnNil()
97 | .toArray()
98 | .subscribe { event in
99 | switch event {
100 | case let .success(element):
101 | expect(element).to(equal([1]))
102 | case let .failure(error):
103 | // FIXME: There should be a better way to do this and to check a more specific error.
104 | expect { throw error }
105 | .to(throwError(errorType: RxOptionalError.self))
106 | }
107 | }
108 | .dispose()
109 | }
110 | }
111 | }
112 |
113 | describe("replaceNilWith") {
114 | context("Observable") {
115 | it("unwraps the optional") {
116 | // Check on compile
117 | let _: Observable = Observable
118 | .just(nil)
119 | .replaceNilWith(0)
120 | }
121 |
122 | it("replaces nil values") {
123 | Observable
124 | .of(1, nil, 3, 4)
125 | .replaceNilWith(2)
126 | .toArray()
127 | .subscribe(onSuccess: {
128 | expect($0).to(equal([1, 2, 3, 4]))
129 | })
130 | .dispose()
131 | }
132 | }
133 |
134 | context("Driver") {
135 | it("unwraps the optional") {
136 | // Check on compile
137 | let _: Driver = Driver
138 | .just(nil)
139 | .replaceNilWith(0)
140 | }
141 |
142 | it("replaces nil values") {
143 | Driver
144 | .of(1, nil, 3, 4)
145 | .replaceNilWith(2)
146 | .asObservable()
147 | .toArray()
148 | .subscribe(onSuccess: {
149 | expect($0).to(equal([1, 2, 3, 4]))
150 | })
151 | .dispose()
152 | }
153 | }
154 | }
155 |
156 | describe("catchOnNil") {
157 | context("Observable") {
158 | it("unwraps the optional") {
159 | // Check on compile
160 | let _: Observable = Observable
161 | .just(nil)
162 | .catchOnNil {
163 | Observable.just(0)
164 | }
165 | }
166 |
167 | it("catches nil and continues with new observable") {
168 | Observable
169 | .of(1, nil, 3, 4)
170 | .catchOnNil {
171 | Observable.just(2)
172 | }
173 | .toArray()
174 | .subscribe(onSuccess: {
175 | expect($0).to(equal([1, 2, 3, 4]))
176 | })
177 | .dispose()
178 | }
179 | }
180 |
181 | context("Driver") {
182 | it("unwraps the optional") {
183 | // Check on compile
184 | let _: Driver = Driver
185 | .just(nil)
186 | .catchOnNil {
187 | Driver.just(0)
188 | }
189 | }
190 |
191 | it("catches nil and continues with new observable") {
192 | Driver
193 | .of(1, nil, 3, 4)
194 | .catchOnNil {
195 | Driver.just(2)
196 | }
197 | .asObservable()
198 | .toArray()
199 | .subscribe(onSuccess: {
200 | expect($0).to(equal([1, 2, 3, 4]))
201 | })
202 | .dispose()
203 | }
204 | }
205 | }
206 | }
207 | }
208 |
--------------------------------------------------------------------------------
/Tests/RxOptionalTests/XCTestManifests.swift:
--------------------------------------------------------------------------------
1 | #if !canImport(ObjectiveC)
2 | import XCTest
3 |
4 | extension OccupiableOperatorsSpec {
5 | // DO NOT MODIFY: This is autogenerated, use:
6 | // `swift test --generate-linuxmain`
7 | // to regenerate.
8 | static let __allTests__OccupiableOperatorsSpec = [
9 | ("filterEmpty__Observable__filters_out_empty_arrays", filterEmpty__Observable__filters_out_empty_arrays),
10 | ("filterEmpty__Observable__filters_out_empty_strings", filterEmpty__Observable__filters_out_empty_strings),
11 | ("filterEmpty__Driver__filters_out_empty_arrays", filterEmpty__Driver__filters_out_empty_arrays),
12 | ("filterEmpty__Driver__filters_out_empty_strings", filterEmpty__Driver__filters_out_empty_strings),
13 | ("catchOnEmpty__Observable__emits_default_error", catchOnEmpty__Observable__emits_default_error)
14 | ]
15 | }
16 |
17 | extension OptionalOperatorsSpec {
18 | // DO NOT MODIFY: This is autogenerated, use:
19 | // `swift test --generate-linuxmain`
20 | // to regenerate.
21 | static let __allTests__OptionalOperatorsSpec = [
22 | ("filterNil__Observable__unwraps_the_optional", filterNil__Observable__unwraps_the_optional),
23 | ("filterNil__Observable__filters_nil_values", filterNil__Observable__filters_nil_values),
24 | ("filterNil__Observable__filters_nil_values_and_keeps_types", filterNil__Observable__filters_nil_values_and_keeps_types),
25 | ("filterNil__Driver__unwraps_the_optional", filterNil__Driver__unwraps_the_optional),
26 | ("filterNil__Driver__filters_nil_values", filterNil__Driver__filters_nil_values),
27 | ("filterNil__Signal__unwraps_the_optional", filterNil__Signal__unwraps_the_optional),
28 | ("filterNil__Signal__filters_nil_values", filterNil__Signal__filters_nil_values),
29 | ("Error_On_Nil__Observable__unwraps_the_optional", Error_On_Nil__Observable__unwraps_the_optional),
30 | ("Error_On_Nil__Observable__throws_default_error", Error_On_Nil__Observable__throws_default_error),
31 | ("replaceNilWith__Observable__unwraps_the_optional", replaceNilWith__Observable__unwraps_the_optional),
32 | ("replaceNilWith__Observable__replaces_nil_values", replaceNilWith__Observable__replaces_nil_values),
33 | ("replaceNilWith__Driver__unwraps_the_optional", replaceNilWith__Driver__unwraps_the_optional),
34 | ("replaceNilWith__Driver__replaces_nil_values", replaceNilWith__Driver__replaces_nil_values),
35 | ("catchOnNil__Observable__unwraps_the_optional", catchOnNil__Observable__unwraps_the_optional),
36 | ("catchOnNil__Observable__catches_nil_and_continues_with_new_observable", catchOnNil__Observable__catches_nil_and_continues_with_new_observable),
37 | ("catchOnNil__Driver__unwraps_the_optional", catchOnNil__Driver__unwraps_the_optional),
38 | ("catchOnNil__Driver__catches_nil_and_continues_with_new_observable", catchOnNil__Driver__catches_nil_and_continues_with_new_observable)
39 | ]
40 | }
41 |
42 | public func __allTests() -> [XCTestCaseEntry] {
43 | return [
44 | testCase(OccupiableOperatorsSpec.__allTests__OccupiableOperatorsSpec),
45 | testCase(OptionalOperatorsSpec.__allTests__OptionalOperatorsSpec)
46 | ]
47 | }
48 | #endif
49 |
--------------------------------------------------------------------------------
/cleanup.sh:
--------------------------------------------------------------------------------
1 | if which swiftformat >/dev/null; then
2 | `which swiftformat` "Sources" --config .swiftformat --quiet
3 | `which swiftformat` "Tests" --config .swiftformat --quiet
4 | `which swiftformat` "Package.swift" --config .swiftformat --quiet
5 | `which swiftformat` "RxOptionalExample.playground/Contents.swift" --config .swiftformat --quiet
6 | else
7 | echo "error: swiftformat not installed, do `sh setup.sh` to install swiftformat."
8 | exit 1
9 | fi
10 |
11 | if which swiftlint >/dev/null; then
12 | `which swiftlint` autocorrect --quiet
13 | else
14 | echo "error: SwiftLint not installed, do `sh setup.sh` to install SwiftLint."
15 | exit 1
16 | fi
17 |
18 | if which xcodegen >/dev/null; then
19 | `which xcodegen` --spec project-carthage.yml
20 | else
21 | echo "error: XcodeGen not installed, do `sh setup.sh` to install XcodeGen."
22 | exit 1
23 | fi
--------------------------------------------------------------------------------
/pods.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -eo pipefail
3 | export RELEASE_VERSION="$(git describe --abbrev=0 | tr -d '\n')"
4 | RELEASE_VERSION=${RELEASE_VERSION:1}
5 | pod lib lint --allow-warnings
6 | pod trunk push --allow-warnings
--------------------------------------------------------------------------------
/project-carthage.yml:
--------------------------------------------------------------------------------
1 | name: RxOptional
2 | options:
3 | minimumXcodeGenVersion: "2.15.1"
4 | developmentLanguage: en
5 | usesTabs: false
6 | indentWidth: 2
7 | tabWidth: 2
8 | xcodeVersion: "1230"
9 | deploymentTarget:
10 | iOS: "10.0"
11 | macOS: "10.10"
12 | tvOS: "10.0"
13 | watchOS: "3.0"
14 | carthageExecutablePath: "`which carthage`"
15 | defaultConfig: "Release"
16 | configs:
17 | Debug: debug
18 | Release: release
19 | attributes:
20 | ORGANIZATIONNAME: RxSwiftCommunity
21 | schemes:
22 | RxOptional iOS:
23 | scheme: {}
24 | build:
25 | parallelizeBuild: true
26 | buildImplicitDependencies: true
27 | targets:
28 | RxOptional iOS: all
29 | RxOptionalTests iOS: [test]
30 | run:
31 | config: Debug
32 | test:
33 | config: Debug
34 | gatherCoverageData: true
35 | targets:
36 | - RxOptionalTests iOS
37 | profile:
38 | config: Release
39 | analyze:
40 | config: Debug
41 | archive:
42 | config: Release
43 | revealArchiveInOrganizer: true
44 | RxOptional macOS:
45 | scheme: {}
46 | build:
47 | parallelizeBuild: true
48 | buildImplicitDependencies: true
49 | targets:
50 | RxOptional macOS: all
51 | RxOptionalTests macOS: [test]
52 | run:
53 | config: Debug
54 | test:
55 | config: Debug
56 | gatherCoverageData: true
57 | targets:
58 | - RxOptionalTests macOS
59 | profile:
60 | config: Release
61 | analyze:
62 | config: Debug
63 | archive:
64 | config: Release
65 | revealArchiveInOrganizer: true
66 | RxOptional watchOS:
67 | scheme: {}
68 | build:
69 | parallelizeBuild: true
70 | buildImplicitDependencies: true
71 | targets:
72 | RxOptional watchOS: all
73 | run:
74 | config: Debug
75 | profile:
76 | config: Release
77 | analyze:
78 | config: Debug
79 | archive:
80 | config: Release
81 | revealArchiveInOrganizer: true
82 | RxOptional tvOS:
83 | scheme: {}
84 | build:
85 | parallelizeBuild: true
86 | buildImplicitDependencies: true
87 | targets:
88 | RxOptional tvOS: all
89 | RxOptionalTests tvOS: [test]
90 | run:
91 | config: Debug
92 | test:
93 | config: Debug
94 | gatherCoverageData: true
95 | targets:
96 | - RxOptionalTests tvOS
97 | profile:
98 | config: Release
99 | analyze:
100 | config: Debug
101 | archive:
102 | config: Release
103 | revealArchiveInOrganizer: true
104 | targets:
105 | RxOptional iOS:
106 | settings:
107 | PRODUCT_NAME: RxOptional
108 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-iOS
109 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
110 | SKIP_INSTALL: NO
111 | SUPPORTS_MACCATALYST: NO
112 | platform: iOS
113 | type: framework
114 | sources:
115 | - Sources/RxOptional
116 | dependencies:
117 | - carthage: RxCocoa
118 | - carthage: RxSwift
119 | RxOptional macOS:
120 | settings:
121 | PRODUCT_NAME: RxOptional
122 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-macOS
123 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
124 | SKIP_INSTALL: NO
125 | platform: macOS
126 | type: framework
127 | sources:
128 | - Sources/RxOptional
129 | dependencies:
130 | - carthage: RxCocoa
131 | - carthage: RxSwift
132 | RxOptional tvOS:
133 | settings:
134 | PRODUCT_NAME: RxOptional
135 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-tvOS
136 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
137 | SKIP_INSTALL: NO
138 | platform: tvOS
139 | type: framework
140 | sources:
141 | - Sources/RxOptional
142 | dependencies:
143 | - carthage: RxCocoa
144 | - carthage: RxSwift
145 | RxOptional watchOS:
146 | settings:
147 | PRODUCT_NAME: RxOptional
148 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-watchOS
149 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
150 | SKIP_INSTALL: NO
151 | platform: watchOS
152 | type: framework
153 | sources:
154 | - Sources/RxOptional
155 | dependencies:
156 | - carthage: RxCocoa
157 | - carthage: RxSwift
158 | RxOptionalTests iOS:
159 | platform: iOS
160 | type: bundle.unit-test
161 | sources:
162 | - path: Tests/RxOptionalTests
163 | dependencies:
164 | - target: RxOptional iOS
165 | - carthage: Nimble
166 | - carthage: Quick
167 | RxOptionalTests macOS:
168 | platform: macOS
169 | type: bundle.unit-test
170 | settings:
171 | CODE_SIGN_IDENTITY: ""
172 | sources:
173 | - path: Tests/RxOptionalTests
174 | dependencies:
175 | - target: RxOptional macOS
176 | - carthage: Nimble
177 | - carthage: Quick
178 | RxOptionalTests tvOS:
179 | platform: tvOS
180 | type: bundle.unit-test
181 | sources:
182 | - path: Tests/RxOptionalTests
183 | dependencies:
184 | - target: RxOptional tvOS
185 | - carthage: Nimble
186 | - carthage: Quick
187 |
--------------------------------------------------------------------------------
/project-spm.yml:
--------------------------------------------------------------------------------
1 | name: RxOptional-SPM
2 | options:
3 | minimumXcodeGenVersion: "2.15.1"
4 | developmentLanguage: en
5 | usesTabs: false
6 | indentWidth: 2
7 | tabWidth: 2
8 | xcodeVersion: "1230"
9 | deploymentTarget:
10 | iOS: "10.0"
11 | macOS: "10.10"
12 | tvOS: "10.0"
13 | watchOS: "3.0"
14 | carthageExecutablePath: "`which carthage`"
15 | defaultConfig: "Release"
16 | configs:
17 | Debug: debug
18 | Release: release
19 | attributes:
20 | ORGANIZATIONNAME: RxSwiftCommunity
21 | schemes:
22 | RxOptional iOS:
23 | scheme: {}
24 | build:
25 | parallelizeBuild: true
26 | buildImplicitDependencies: true
27 | targets:
28 | RxOptional iOS: all
29 | run:
30 | config: Debug
31 | test:
32 | config: Debug
33 | gatherCoverageData: true
34 | profile:
35 | config: Release
36 | analyze:
37 | config: Debug
38 | archive:
39 | config: Release
40 | revealArchiveInOrganizer: true
41 | RxOptional macOS:
42 | scheme: {}
43 | build:
44 | parallelizeBuild: true
45 | buildImplicitDependencies: true
46 | targets:
47 | RxOptional macOS: all
48 | run:
49 | config: Debug
50 | test:
51 | config: Debug
52 | gatherCoverageData: true
53 | profile:
54 | config: Release
55 | analyze:
56 | config: Debug
57 | archive:
58 | config: Release
59 | revealArchiveInOrganizer: true
60 | RxOptional watchOS:
61 | scheme: {}
62 | build:
63 | parallelizeBuild: true
64 | buildImplicitDependencies: true
65 | targets:
66 | RxOptional watchOS: all
67 | run:
68 | config: Debug
69 | profile:
70 | config: Release
71 | analyze:
72 | config: Debug
73 | archive:
74 | config: Release
75 | revealArchiveInOrganizer: true
76 | RxOptional tvOS:
77 | scheme: {}
78 | build:
79 | parallelizeBuild: true
80 | buildImplicitDependencies: true
81 | targets:
82 | RxOptional tvOS: all
83 | run:
84 | config: Debug
85 | test:
86 | config: Debug
87 | gatherCoverageData: true
88 | profile:
89 | config: Release
90 | analyze:
91 | config: Debug
92 | archive:
93 | config: Release
94 | revealArchiveInOrganizer: true
95 | packages:
96 | RxSwift:
97 | url: https://github.com/ReactiveX/RxSwift.git
98 | from: 6.0.0
99 | targets:
100 | RxOptional iOS:
101 | settings:
102 | PRODUCT_NAME: RxOptional
103 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-iOS
104 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
105 | SKIP_INSTALL: NO
106 | SUPPORTS_MACCATALYST: NO
107 | platform: iOS
108 | type: framework
109 | sources:
110 | - Sources/RxOptional
111 | dependencies:
112 | - package: RxSwift
113 | product: RxSwift
114 | - package: RxSwift
115 | product: RxCocoa
116 | RxOptional macOS:
117 | settings:
118 | PRODUCT_NAME: RxOptional
119 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-macOS
120 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
121 | SKIP_INSTALL: NO
122 | platform: macOS
123 | type: framework
124 | sources:
125 | - Sources/RxOptional
126 | dependencies:
127 | - package: RxSwift
128 | product: RxSwift
129 | - package: RxSwift
130 | product: RxCocoa
131 | RxOptional tvOS:
132 | settings:
133 | PRODUCT_NAME: RxOptional
134 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-tvOS
135 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
136 | SKIP_INSTALL: NO
137 | platform: tvOS
138 | type: framework
139 | sources:
140 | - Sources/RxOptional
141 | dependencies:
142 | - package: RxSwift
143 | product: RxSwift
144 | - package: RxSwift
145 | product: RxCocoa
146 | RxOptional watchOS:
147 | settings:
148 | PRODUCT_NAME: RxOptional
149 | PRODUCT_BUNDLE_IDENTIFIER: RxSwiftCommunity.RxOptional.RxOptional-watchOS
150 | BUILD_LIBRARY_FOR_DISTRIBUTION: YES
151 | SKIP_INSTALL: NO
152 | platform: watchOS
153 | type: framework
154 | sources:
155 | - Sources/RxOptional
156 | dependencies:
157 | - package: RxSwift
158 | product: RxSwift
159 | - package: RxSwift
160 | product: RxCocoa
161 |
--------------------------------------------------------------------------------
/scripts/bump-version.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 | git config --global user.name "RxOptional Maintainers"
5 | git config --global user.email "rxoptional@rxswift.org"
6 | npx standard-version
7 | echo "RELEASE_VERSION=$(git describe --abbrev=0 | tr -d '\n')" >> $GITHUB_ENV
8 | export VERSION="$(git describe --abbrev=0 | tr -d '\n')"
9 | VERSION=${VERSION:1}
10 | echo $VERSION
11 | npx podspec-bump -w -i "$VERSION"
12 | git add -A
13 | git commit --amend --no-edit
--------------------------------------------------------------------------------
/scripts/carthage.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # carthage.sh
4 | # Usage example: ./carthage.sh build --platform iOS
5 |
6 | set -euo pipefail
7 |
8 | xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX)
9 | trap 'rm -f "$xcconfig"' INT TERM HUP EXIT
10 |
11 | # For Xcode 12 make sure EXCLUDED_ARCHS is set to arm architectures otherwise
12 | # the build will fail on lipo due to duplicate architectures.
13 |
14 | CURRENT_XCODE_VERSION=$(xcodebuild -version | grep "Build version" | cut -d' ' -f3)
15 | echo "EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200__BUILD_$CURRENT_XCODE_VERSION = arm64 arm64e armv7 armv7s armv6 armv8" >> $xcconfig
16 |
17 | echo 'EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200 = $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200__BUILD_$(XCODE_PRODUCT_BUILD_VERSION))' >> $xcconfig
18 | echo 'EXCLUDED_ARCHS = $(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT)__XCODE_$(XCODE_VERSION_MAJOR))' >> $xcconfig
19 |
20 | export XCODE_XCCONFIG_FILE="$xcconfig"
21 | carthage build "$@"
--------------------------------------------------------------------------------
/scripts/xcframeworks.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 | rm -rf RxOptional-SPM.xcodeproj
5 | rm -rf xcarchives/*
6 | rm -rf RxOptional.xcframework.zip
7 | rm -rf RxOptional.xcframework
8 |
9 | xcodegen --spec project-spm.yml
10 |
11 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional iOS" -destination "generic/platform=iOS" -archivePath "xcarchives/RxOptional-iOS" SKIP_INSTALL=NO SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
12 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional iOS" -destination "generic/platform=iOS Simulator" -archivePath "xcarchives/RxOptional-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
13 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional tvOS" -destination "generic/platform=tvOS" -archivePath "xcarchives/RxOptional-tvOS" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
14 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional tvOS" -destination "generic/platform=tvOS Simulator" -archivePath "xcarchives/RxOptional-tvOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
15 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional macOS" -destination "generic/platform=macOS" -archivePath "xcarchives/RxOptional-macOS" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
16 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional watchOS" -destination "generic/platform=watchOS" -archivePath "xcarchives/RxOptional-watchOS" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
17 | xcodebuild archive -quiet -project RxOptional-SPM.xcodeproj -configuration Release -scheme "RxOptional watchOS" -destination "generic/platform=watchOS Simulator" -archivePath "xcarchives/RxOptional-watchOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE="bitcode" ENABLE_BITCODE=YES | xcpretty --color --simple
18 |
19 | xcodebuild -create-xcframework \
20 | -framework "xcarchives/RxOptional-iOS-Simulator.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
21 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-iOS-Simulator.xcarchive/dSYMs/RxOptional.framework.dSYM" \
22 | -framework "xcarchives/RxOptional-iOS.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
23 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-iOS.xcarchive/dSYMs/RxOptional.framework.dSYM" \
24 | -framework "xcarchives/RxOptional-tvOS-Simulator.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
25 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-tvOS-Simulator.xcarchive/dSYMs/RxOptional.framework.dSYM" \
26 | -framework "xcarchives/RxOptional-tvOS.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
27 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-tvOS.xcarchive/dSYMs/RxOptional.framework.dSYM" \
28 | -framework "xcarchives/RxOptional-macOS.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
29 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-macOS.xcarchive/dSYMs/RxOptional.framework.dSYM" \
30 | -framework "xcarchives/RxOptional-watchOS-Simulator.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
31 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-watchOS-Simulator.xcarchive/dSYMs/RxOptional.framework.dSYM" \
32 | -framework "xcarchives/RxOptional-watchOS.xcarchive/Products/Library/Frameworks/RxOptional.framework" \
33 | -debug-symbols ""$(pwd)"/xcarchives/RxOptional-watchOS.xcarchive/dSYMs/RxOptional.framework.dSYM" \
34 | -output "RxOptional.xcframework"
35 |
36 | zip -r RxOptional.xcframework.zip RxOptional.xcframework
37 | rm -rf xcarchives/*
38 | rm -rf RxOptional.xcframework
39 | rm -rf RxOptional-SPM.xcodeproj
--------------------------------------------------------------------------------