-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Prepare 0.39.0 #58
Merged
Merged
Prepare 0.39.0 #58
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2550020
to
e6a441a
Compare
* more main actor audit * wip * wip * fix * better task result == * task result tests * wip * wip * wip * wip * wip * wip * wip * wip * wip * fix merge conflicts * wip * wip * lots of doc fixes and modernizations * lots more docs and better hashable conformance for TaskResult * more docs * clean up * more tests and docs * clean up * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * small clean up * wip * wip * wip * wip * wip * wip * wip * explicit * wip * fix bug in TestStore.receive * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * fixes * wip * tools for non-deterministic TestStore.receive * fix * wip * wip * remove inAnyOrder stuff * wip * wip * wip * wip * wip * wip * wip * convert download case study to use async/await * animations * fix tests * remove executor experiment * wip * wip * wip * wip * wip * speech simplification * wip * wip * wip * wip * wip * wip * add a few todos * wrote some tests * simplify speech recognizer * fix tests * update some docs about error throwing behavior * wip * wip * fix * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * Swift 5.5.2 fixes * wip * Bump timeout * wip * wip * Finesse * proper way to detect main queue * extra guard * revert main queue check * move stuff around * docs * fixed a bunch of warnings * Fix references * clean up * clean up * fix a bunch of warnings * clean up * un-soft deprecate concatenate * async teststore.send * fix uikit tests * drop sendable * wip * wip * wip * wip * wip * clean up * clean up * reorganize, remove extra task cancellation handler * wip * wip * wip * wip * wip * wip * Make TestStore.send async (#1190) * async teststore.send * fix uikit tests * Converted all tests to async * clean up * added docs * Update Sources/ComposableArchitecture/TestStore.swift Co-authored-by: Stephen Celis <stephen@stephencelis.com> * Update Sources/ComposableArchitecture/TestStore.swift Co-authored-by: Stephen Celis <stephen@stephencelis.com> * docs and readme update * Update README.md * Update Tests/ComposableArchitectureTests/StoreTests.swift Co-authored-by: Stephen Celis <stephen@stephencelis.com> * fix * Update Sources/ComposableArchitecture/TestStore.swift Co-authored-by: Stephen Celis <stephen@stephencelis.com> * Update Sources/ComposableArchitecture/TestStore.swift Co-authored-by: Stephen Celis <stephen@stephencelis.com> * Update Sources/ComposableArchitecture/TestStore.swift Co-authored-by: Stephen Celis <stephen@stephencelis.com> * clean up Co-authored-by: Stephen Celis <stephen@stephencelis.com> * wip * wip * wip * make fetchNumber throwing and fix tests * effect basics clean up * use local state for isLoading in refreshable case study * clean up * fix test * wip * wip * wip * wip * wip * wip * fixes * clean up * clean up * Simplify * wip * clean up * wip * AsyncStream.finished() * give Send a public initializer * make send public * temporarily make box public * remove concurrency flag * wip * wip * wip * wip * wip * docs * speech * simplify * clean up; * unchecked sendable * clean up * clean up * wip * docs * docs * more docs * lots of docs * wip * wip * wip * more docs for streamWithContinuation * wip * wip * wip * Make internal, too * wip * Remove sendability detection It breaks things, like: let request = UncheckedSendable( SKProductsRequest(productIdentifiers: [] ) // UncheckedSendable<NSObject> // *not* _<SKProductsRequest> * wip * doc clean up; * fixed some todos * docs * wip * remove thread safety FAQ from readme * fix test * wip * docs clean up * docs clean up * added a testing article and fixed some docs * rearrange * docs clean up * wip * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Effects/ConcurrencySupport.swift Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Effects/ConcurrencySupport.swift Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Effects/ConcurrencySupport.swift Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Effects/ConcurrencySupport.swift Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * Update Sources/ComposableArchitecture/Documentation.docc/Articles/Testing.md Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> * wip * wip * wip Co-authored-by: Stephen Celis <stephen@stephencelis.com> Co-authored-by: Thomas Grapperon <35562418+tgrapperon@users.noreply.github.com> (cherry picked from commit 108e3a536fcebb16c4f247ef92c2d7326baf9fe3) # Conflicts: # Examples/CaseStudies/SwiftUICaseStudies/00-Core.swift # Examples/CaseStudies/SwiftUICaseStudies/01-GettingStarted-Animations.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-Basics.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-Cancellation.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-LongLiving.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-Refreshable.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-SystemEnvironment.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-Timers.swift # Examples/CaseStudies/SwiftUICaseStudies/02-Effects-WebSocket.swift # Examples/CaseStudies/SwiftUICaseStudies/03-Navigation-Lists-LoadThenNavigate.swift # Examples/CaseStudies/SwiftUICaseStudies/03-Navigation-Lists-NavigateAndLoad.swift # Examples/CaseStudies/SwiftUICaseStudies/03-Navigation-LoadThenNavigate.swift # Examples/CaseStudies/SwiftUICaseStudies/03-Navigation-NavigateAndLoad.swift # Examples/CaseStudies/SwiftUICaseStudies/03-Navigation-Sheet-LoadThenPresent.swift # Examples/CaseStudies/SwiftUICaseStudies/03-Navigation-Sheet-PresentAndLoad.swift # Examples/CaseStudies/SwiftUICaseStudies/04-HigherOrderReducers-ElmLikeSubscriptions.swift # Examples/CaseStudies/SwiftUICaseStudies/04-HigherOrderReducers-Lifecycle.swift # Examples/CaseStudies/SwiftUICaseStudies/04-HigherOrderReducers-ResuableOfflineDownloads/DownloadClient.swift # Examples/CaseStudies/SwiftUICaseStudies/04-HigherOrderReducers-ResuableOfflineDownloads/DownloadComponent.swift # Examples/CaseStudies/SwiftUICaseStudies/04-HigherOrderReducers-ReusableFavoriting.swift # Examples/CaseStudies/SwiftUICaseStudies/FactClient.swift # Examples/CaseStudies/SwiftUICaseStudies/Internal/ResignFirstResponder.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-AnimationsTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-BasicsTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-CancellationTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-RefreshableTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-TimersTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-WebSocketTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/04-HigherOrderReducers-LifecycleTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/04-HigherOrderReducers-ReusableFavoritingTests.swift # Examples/CaseStudies/SwiftUICaseStudiesTests/04-HigherOrderReducers-ReusableOfflineDownloadsTests.swift # Examples/CaseStudies/UIKitCaseStudies/LoadThenNavigate.swift # Examples/CaseStudies/UIKitCaseStudies/NavigateAndLoad.swift # Examples/Search/Search/SearchView.swift # Examples/Search/Search/WeatherClient.swift # Examples/SpeechRecognition/SpeechRecognition/SpeechClient/Live.swift # Examples/SpeechRecognition/SpeechRecognition/SpeechRecognition.swift # Examples/SpeechRecognition/SpeechRecognition/SpeechRecognitionApp.swift # Examples/SpeechRecognition/SpeechRecognitionTests/SpeechRecognitionTests.swift # Examples/TicTacToe/App/RootView.swift # Examples/TicTacToe/tic-tac-toe/Sources/AppCore/AppCore.swift # Examples/TicTacToe/tic-tac-toe/Sources/AuthenticationClientLive/LiveAuthenticationClient.swift # Examples/TicTacToe/tic-tac-toe/Sources/LoginCore/LoginCore.swift # Examples/TicTacToe/tic-tac-toe/Sources/LoginSwiftUI/LoginView.swift # Examples/TicTacToe/tic-tac-toe/Sources/TwoFactorCore/TwoFactorCore.swift # Examples/TicTacToe/tic-tac-toe/Sources/TwoFactorSwiftUI/TwoFactorView.swift # Examples/TicTacToe/tic-tac-toe/Tests/AppCoreTests/AppCoreTests.swift # Examples/TicTacToe/tic-tac-toe/Tests/LoginCoreTests/LoginCoreTests.swift # Examples/TicTacToe/tic-tac-toe/Tests/LoginSwiftUITests/LoginSwiftUITests.swift # Examples/TicTacToe/tic-tac-toe/Tests/TwoFactorCoreTests/TwoFactorCoreTests.swift # Examples/TicTacToe/tic-tac-toe/Tests/TwoFactorSwiftUITests/TwoFactorSwiftUITests.swift # Examples/Todos/Todos/Todos.swift # Examples/Todos/Todos/TodosApp.swift # Examples/Todos/TodosTests/TodosTests.swift # Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/LiveAudioRecorderClient.swift # Examples/VoiceMemos/VoiceMemos/VoiceMemo.swift # Examples/VoiceMemos/VoiceMemos/VoiceMemos.swift # Examples/VoiceMemos/VoiceMemos/VoiceMemosApp.swift # Examples/VoiceMemos/VoiceMemosTests/VoiceMemosTests.swift # Package.swift # README.md # Sources/ComposableArchitecture/Documentation.docc/Articles/GettingStarted.md # Sources/ComposableArchitecture/Effect.swift # Sources/ComposableArchitecture/Effects/Animation.swift # Sources/ComposableArchitecture/Effects/Cancellation.swift # Sources/ComposableArchitecture/Effects/Concurrency.swift # Sources/ComposableArchitecture/Effects/Timer.swift # Sources/ComposableArchitecture/Internal/Create.swift # Sources/ComposableArchitecture/Internal/Deprecations.swift # Sources/ComposableArchitecture/Internal/RuntimeWarnings.swift # Sources/ComposableArchitecture/Reducer.swift # Sources/ComposableArchitecture/Store.swift # Sources/ComposableArchitecture/SwiftUI/Alert.swift # Sources/ComposableArchitecture/SwiftUI/Binding.swift # Sources/ComposableArchitecture/SwiftUI/ConfirmationDialog.swift # Sources/ComposableArchitecture/SwiftUI/ForEachStore.swift # Sources/ComposableArchitecture/SwiftUI/SwitchStore.swift # Sources/ComposableArchitecture/TestSupport/TestStore.swift # Sources/ComposableArchitecture/ViewStore.swift # Tests/ComposableArchitectureTests/ComposableArchitectureTests.swift # Tests/ComposableArchitectureTests/EffectDebounceTests.swift # Tests/ComposableArchitectureTests/EffectTests.swift # Tests/ComposableArchitectureTests/ReducerTests.swift # Tests/ComposableArchitectureTests/RuntimeWarningTests.swift # Tests/ComposableArchitectureTests/StoreTests.swift # Tests/ComposableArchitectureTests/TestStoreFailureTests.swift # Tests/ComposableArchitectureTests/TestStoreTests.swift # Tests/ComposableArchitectureTests/TimerTests.swift # Tests/ComposableArchitectureTests/ViewStoreTests.swift
## Changes - Require ReactiveSwift 7.1 which includes latest `async` APIs in `TestScheduler` and `DateScheduler`. - Remove local `async` `DateScheduler` extensions. - Add missing `async` keywords in asynchronous tests.
8763714
to
19cb15f
Compare
da54550
to
9911316
Compare
## Changes - Fix unit tests. - Remove unnecessary Combine imports - Fix imports on Linux. - Fix unit tests on Linux + Add missing compile checks for `XCTExpectFailure` in Linux + Disable tests that use `@MainActor` on Linux because of an issue gathering tests: https://github.com/apple/swift-corelibs-xctest/issues/424 - Remove Swift installation from SwiftPM Linux job, as Swift is already included in `ubuntu-latest` (`ubuntu-20.04`): https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2004-Readme.md#language-and-runtime
9911316
to
3ef2d04
Compare
mluisbrown
approved these changes
Dec 21, 2022
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Cherry pick of upstream commits up to version
0.39.0
🏷️:Concurrency Beta (#1189)
108e3a5Discussion
Breaking changes due to
Effect
no longer typealiasingSignalProducer
This update will cause countless breaking changes in projects as
Effect
is now astruct
that wraps aSignalProducer
instead of being atypealias
of it. This is not as big of a problem in upstream TCA becauseEffect
is still aPublisher
, so all Combine operators will keep working onEffect
operation chains, whereas in RAS-TCA they will now break.Possible approaches:
async
based ones quickerEffect
outputsSignalProducer
's operators inEffect
~.producer.doOperation().eraseToEffect()
Effect
sSignalProducerConvertible
conformance toEffect
.producer
in relevant chains).producer
on the chain before using any RAS operatorsproducer
as public (requirement ofSignalProducerConvertible
), which is not idealEffect
sTestScheduler
Pointing to ReactiveSwift 7.1, which already includes
async
APIs inTestScheduler
andDateScheduler
.Upstream TCA relies on `CombineScheduler`'s `[TestScheduler](https://github.com/pointfreeco/combine-schedulers#testscheduler)` to control scheduling in unit tests, and they have added `async` variants of the `advance(by:)`, `advance(to:)` and `run()` as well as helper `sleep` and `timer` async APIs.- For now I've left all
- I've implemented the
await mainQueue.advance()
andawait mainQueue.run()
calls in place. It triggers a warning but most tests pass, except those where the reducer uses the newsleep
ortimer
async APIs on effects, which fail. .sleep
andtimer
async APIs inSchedulerExtensions
for now.I opened ReactiveCocoa/ReactiveSwift#857 to add these new async APIs which are required to properly test new async effects that wait on time, as well as help make the transition to Clock APIs smoother as well.
New
SignalProducerConvertible.values
Async(Throwing)Stream
APIsIn order to use
SignalProducer
s in theasync
"world", while replicating the existing APIs inCombine
, two newvalues
computed properties inSignalProducerConvertible
were added:values: AsyncStream<Value>
whenError == Never
values: AsyncThrowingStream<Value, Swift.Error>
otherwiseImplementation was heavily inspired by ReactiveCocoa/ReactiveSwift#847, the main difference is that these extensions were added to
SignalProducerConvertible
instead ofSignalProducer
. This allows having defining both properties with the same name while providing symmetry with Combine.Thoughts? 🙏🏼