mluisbrown

mluisbrown

iOS Engineer 📱 Functional programming FRP

Member Since 8 years ago

https://www.argent.xyz, Lisbon, Portugal

Experience Points
75
follower
Lessons Completed
1
follow
Lessons Completed
225
stars
Best Reply Awards
49
repos

419 contributions in the last year

Pinned
⚡ A library for building applications in a consistent and understandable way, with composition, testing, and ergonomics in mind.
⚡ An iOS app that displays photos from your photo library taken on a particular day in history.
⚡ Swift µFramework for synchronous testing of asynchronous Combine code.
Activity
Nov
17
2 weeks ago
pull request

mluisbrown pull request devMEremenko/XcodeBenchmark

mluisbrown
mluisbrown

Add 14" MBP M1 Pro 10 Core 32GB

Checklist

If you have any non-Apple hardware components - submit your results to the Custom Hardware table.

  • I performed all steps to correctly run XcodeBenchmark.
  • I used Xcode 12.5 or above.
  • I attached a screenshot with a compilation time and other fields, example.
  • I confirm that Time column is still sorted.
  • The content in cells is centered.
image
Nov
12
2 weeks ago
open pull request

mluisbrown wants to merge ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Add `asyncStream` and `asyncThrowingStream` for `Signal` and `SignalProducer`

This is a proposal to add asyncStream and asyncThrowingStream in order to bridge into Swift Concurrency. I find this especially useful for writing non-blocking async tests.

A couple of things I'd love to hear your thoughts on (apart from the usual review):

  • General thoughts on the idea
  • Where to place these extensions within the project and naming of files
  • Raising of CI platform to Xcode 11 (due to minimum Swift and testing target version requirements)
  • Lack of support for Swift Concurrency in Quick/Nimble (leading to tests written with XCTest)
mluisbrown
mluisbrown

Doesn't this need to be added in the Signal and SP extensions also?

pull request

mluisbrown merge to ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Add `asyncStream` and `asyncThrowingStream` for `Signal` and `SignalProducer`

This is a proposal to add asyncStream and asyncThrowingStream in order to bridge into Swift Concurrency. I find this especially useful for writing non-blocking async tests.

A couple of things I'd love to hear your thoughts on (apart from the usual review):

  • General thoughts on the idea
  • Where to place these extensions within the project and naming of files
  • Raising of CI platform to Xcode 11 (due to minimum Swift and testing target version requirements)
  • Lack of support for Swift Concurrency in Quick/Nimble (leading to tests written with XCTest)
pull request

mluisbrown merge to ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Add `asyncStream` and `asyncThrowingStream` for `Signal` and `SignalProducer`

This is a proposal to add asyncStream and asyncThrowingStream in order to bridge into Swift Concurrency. I find this especially useful for writing non-blocking async tests.

A couple of things I'd love to hear your thoughts on (apart from the usual review):

General thoughts on the idea Where to place these extensions within the project and naming of files Raising of CI platform to Xcode 11 (due to minimum Swift and testing target version requirements) Lack of support for Swift Concurrency in Quick/Nimble (leading to tests written with XCTest)

mluisbrown
mluisbrown

Looks awesome 👏

open pull request

mluisbrown wants to merge ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Add `asyncStream` and `asyncThrowingStream` for `Signal` and `SignalProducer`

This is a proposal to add asyncStream and asyncThrowingStream in order to bridge into Swift Concurrency. I find this especially useful for writing non-blocking async tests.

A couple of things I'd love to hear your thoughts on (apart from the usual review):

General thoughts on the idea Where to place these extensions within the project and naming of files Raising of CI platform to Xcode 11 (due to minimum Swift and testing target version requirements) Lack of support for Swift Concurrency in Quick/Nimble (leading to tests written with XCTest)

mluisbrown
mluisbrown
open pull request

mluisbrown wants to merge ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Add `asyncStream` and `asyncThrowingStream` for `Signal` and `SignalProducer`

This is a proposal to add asyncStream and asyncThrowingStream in order to bridge into Swift Concurrency. I find this especially useful for writing non-blocking async tests.

A couple of things I'd love to hear your thoughts on (apart from the usual review):

General thoughts on the idea Where to place these extensions within the project and naming of files Raising of CI platform to Xcode 11 (due to minimum Swift and testing target version requirements) Lack of support for Swift Concurrency in Quick/Nimble (leading to tests written with XCTest)

mluisbrown
mluisbrown

With Xcode 13.2 (currently in beta), Swift Concurrency has been back ported to iOS 13 and macOS 10.15 so if we wait for that we might be able to bring this availability check down:

#if compiler(>=5.5.2) && canImport(_Concurrency)
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
pull request

mluisbrown merge to ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Add `asyncStream` and `asyncThrowingStream` for `Signal` and `SignalProducer`

This is a proposal to add asyncStream and asyncThrowingStream in order to bridge into Swift Concurrency. I find this especially useful for writing non-blocking async tests.

A couple of things I'd love to hear your thoughts on (apart from the usual review):

General thoughts on the idea Where to place these extensions within the project and naming of files Raising of CI platform to Xcode 11 (due to minimum Swift and testing target version requirements) Lack of support for Swift Concurrency in Quick/Nimble (leading to tests written with XCTest)

mluisbrown
mluisbrown

Looks awesome 👏

Nov
10
3 weeks ago
push

mluisbrown push trading-point/reactiveswift-composable-architecture

mluisbrown
mluisbrown

Fix unfunctional cancel button handlers in AlertsAndActionSheets case study (#779)

  • Fix unfunctional cancel button handlers in AlertsAndActionSheets case study

  • Fix tests

  • Removes *CancelTapped actions from AlertsAndActionSheets case study

mluisbrown
mluisbrown

Fix BindableState: Codable strategies (#781)

mluisbrown
mluisbrown

Update bindable helpers docs (#783)

  • Update bindable helpers docs

  • wip

mluisbrown
mluisbrown
mluisbrown
mluisbrown

Fix macOS <11 builds with Xcode 13 RC (#797)

  • Fix macOS <11 builds with Xcode 13 RC

Fixes #796.

  • wip

  • Update Tests/ComposableArchitectureTests/ViewStoreTests.swift

Co-authored-by: Brandon Williams [email protected]

Co-authored-by: Brandon Williams [email protected]

mluisbrown
mluisbrown

Remove old deprecations (#795)

  • Remove old deprecations

  • wip

mluisbrown
mluisbrown

Thread messaging (#803)

  • Use thread dictionary for check instead

  • Improve thread check messaging for Store.scope

  • typo fix

Co-authored-by: Brandon Williams [email protected]

mluisbrown
mluisbrown
mluisbrown
mluisbrown

Deprecate dynamic member lookup on view stores in favor of ViewStore.binding (#810)

  • wip

  • wip

mluisbrown
mluisbrown

Deprecate Store.publisherScope (#758)

mluisbrown
mluisbrown

Clean up speech recognition case study. (#812)

  • Clean up speech recognition case study.

  • fix tests

  • clean up;

mluisbrown
mluisbrown

Added testStorePublisherSubscriptionOrder() ViewStore test.

mluisbrown
mluisbrown

Fix bindable deprecations (#815)

  • Fix Bindable Deprecations

  • More CI

  • wip

  • wip

  • wip

  • wip

mluisbrown
mluisbrown

ObservedViewStore for projectedBindings (#770)

This reverts commit 6aadf373db58a2320c582741a76794ac3d6bfc43.

  • Revert "Try projectedBinding first for ViewStore bindings"

This reverts commit 0e2fae1cbf53e84194a6fb3a5eb077021110c395.

  • Revert "Created ObservedViewStore"

This reverts commit 7f99a718b96d186324627ef6d016a882e83e9f8e.

  • Revert "Added observedSelf property to ViewStore"

This reverts commit 65dc3837b37d8251c2d1e2916c94894b8eb93db0.

  • Replaced self.binding with projectedValue

  • Revert "Replaced self.binding with projectedValue"

This reverts commit cc2b69777e63a8b8cee40df5d5db9557302177cd.

  • Derive bindings using WrappedState helper

  • wip

  • wip

  • wip

  • avoid potential retain cycle

  • Revert "Derive bindings using WrappedState helper"

This reverts commit f3fb18f4458f47d28905e8b346c767fbd05b7f99.

Co-authored-by: Stephen Celis [email protected]

mluisbrown
mluisbrown

Update AlertState to use new APIs (#794)

  • Update AlertState to use new APIs

  • fix

  • Feedback

  • wip

  • Fix

  • wip

  • wip

  • wip

  • wip

mluisbrown
mluisbrown

Perform thread check only when store is created on main queue. (#811)

  • Perform thread check only when store is created on main thread.

  • clean up

  • Update Sources/ComposableArchitecture/Store.swift

  • clean up

  • Update Sources/ComposableArchitecture/Store.swift

  • clean up

  • execute setSpecific only once.

  • logic fix

  • added a test

  • typo

  • wip

  • docs

  • fix test

  • Update Sources/ComposableArchitecture/Store.swift

Co-authored-by: Thomas Grapperon [email protected]

  • Run swift-format

  • Clean up speech recognition case study. (#812)

  • Clean up speech recognition case study.

  • fix tests

  • clean up;

  • Alternative to CurrentValueSubject in ViewStore (#755)

  • Replaced CurrentValueSubject with CurrentValueRelay

  • Added final to DemandBuffer

Co-authored-by: Brandon Williams [email protected]

  • Run swift-format

  • Fix bindable deprecations (#815)

  • Fix Bindable Deprecations

  • More CI

  • wip

  • wip

  • wip

  • wip

  • Run swift-format

  • beef up test

  • expectation

  • fix

Co-authored-by: Stephen Celis [email protected] Co-authored-by: Thomas Grapperon [email protected] Co-authored-by: stephencelis [email protected] Co-authored-by: iampatbrown [email protected] Co-authored-by: mbrandonw [email protected]

mluisbrown
mluisbrown

Check main thread via Thread.isMainThread (#823)

  • Check main thread via Thread.isMainThread

  • wip

  • wip

mluisbrown
mluisbrown

Fix typo in BindingAction.pullback(_:) docs (#830)

commit sha: 5e26ae9f8c2ffda872d42add90313cdd152ea524

push time in 2 weeks ago
Activity icon
delete
deleted time in 2 weeks ago
Activity icon
created branch
createdAt 2 weeks ago
Nov
3
4 weeks ago
push

mluisbrown push argentlabs/ramp-sdk-ios

mluisbrown
mluisbrown

Change Passbase dependency to 2.7.4

commit sha: 4705c6ef114b27fcd8bfe8c96104a9eee18ce529

push time in 3 weeks ago
Sep
24
2 months ago
Activity icon
issue

mluisbrown issue comment ReactiveCocoa/ReactiveSwift

mluisbrown
mluisbrown

Support await / AsyncSequence

I haven’t tried the new betas yet, but I imagine the prevalence of @MainActor in iOS 15 will bring issues to current uses of ReactiveSwift. Specifically, I imagine you won’t be able to just do this:

producer
  .observe(on: UIScheduler())
  .start { [label] in label.text = $0  }

Feature request:

for await value in producer.start() {
  self.label.text = value
}

Unfortunately for try await would mean we lose error type information, so I would propose this API produces Result<Value, Error>, or a sequence of Value if Error is Never.

I’ll probably work on this throughout the week, but other thoughts are appreciated!

References:

Other ideas:

  • Being able to create SignalProducers using async:
SignalProducer<Int, MyError> { observer, disposable in
  observer.send(value: await f1())

  guard !disposable.isDisposed else { return }

  do {
    observer.send(value: try await f2())
  } catch {
    observer.send(error: error)
  }
}
  • Or simply just one async function:
let producer = SignalProducer<Int, Error>(asyncFunction: f)
  • New collect overloads:
let values: [Int] = await producer.collect()
let result: Result<[Int], MyError> = try await producer.collect()
mluisbrown
mluisbrown

@NachoSoto I guess @danya61 is referring to this PR which I think is the last piece in back porting concurrency to older OSes. (looks like it will be iOS 13, macOS 10.15).

Sep
21
2 months ago
started
started time in 2 months ago
Sep
18
2 months ago
pull request

mluisbrown merge to pointfreeco/swift-composable-architecture

mluisbrown
mluisbrown

Perform thread check only when store is created on main queue.

This relaxes the thread checking in the store to only those stores created on the main queue. This still allows people to create stores on background threads and send actions on background threads, but such stores will not get thread checking.

See https://github.com/pointfreeco/swift-composable-architecture/discussions/802 for a lot more discussion on why we want to do this.

Activity icon
issue

mluisbrown issue comment pointfreeco/swift-composable-architecture

mluisbrown
mluisbrown

Use dispatch queue specific key to check thread safety

This is an alternative way to handle thread checks, as proposed by @mluisbrown in #802, and an alternative to #805 that should work for arbitrary queues.

The store's initializer gets an additional dispatchQueue argument (.main by default), and some DispatchSpecificKey is used to store some store's metadata in the DispatchQueue.

Thread safety is delegated to GCD if I understand correctly.

mluisbrown
mluisbrown

I agree that #811 is a good compromise. As @lukeredpath mentioned, anyone using Stores off the main thread probably knows what they're doing so shouldn't need the checks.

Sep
17
2 months ago
pull request

mluisbrown merge to pointfreeco/swift-composable-architecture

mluisbrown
mluisbrown

Use dispatch queue specific key to check thread safety

This is an alternative way to handle thread checks, as proposed by @mluisbrown in #802, and an alternative to #805 that should work for arbitrary queues.

The store's initializer gets an additional dispatchQueue argument (.main by default), and some DispatchSpecificKey is used to store some store's metadata in the DispatchQueue.

Thread safety is delegated to GCD if I understand correctly.

open pull request

mluisbrown wants to merge pointfreeco/swift-composable-architecture

mluisbrown
mluisbrown

Use dispatch queue specific key to check thread safety

This is an alternative way to handle thread checks, as proposed by @mluisbrown in #802, and an alternative to #805 that should work for arbitrary queues.

The store's initializer gets an additional dispatchQueue argument (.main by default), and some DispatchSpecificKey is used to store some store's metadata in the DispatchQueue.

Thread safety is delegated to GCD if I understand correctly.

mluisbrown
mluisbrown

For Stores not using the main queue, this message is misleading. For that case, since it's not possible to obtain the current queue (nor do we have the queue on which it was created), the message could be changed to something like:

Action sent on a different DispatchQueue to the one the Store was created on

Or, if we were to hold onto the creation DispatchQueue in Store, we could use:

Store was created on \(queue.name), but the Action was sent on a different queue
open pull request

mluisbrown wants to merge pointfreeco/swift-composable-architecture

mluisbrown
mluisbrown

Use dispatch queue specific key to check thread safety

This is an alternative way to handle thread checks, as proposed by @mluisbrown in #802, and an alternative to #805 that should work for arbitrary queues.

The store's initializer gets an additional dispatchQueue argument (.main by default), and some DispatchSpecificKey is used to store some store's metadata in the DispatchQueue.

Thread safety is delegated to GCD if I understand correctly.

mluisbrown
mluisbrown

Strictly speaking these should probably be renamed to queueCheck and QueueCheckStatus.

pull request

mluisbrown merge to pointfreeco/swift-composable-architecture

mluisbrown
mluisbrown

Use dispatch queue specific key to check thread safety

This is an alternative way to handle thread checks, as proposed by @mluisbrown in #802, and an alternative to #805 that should work for arbitrary queues.

The store's initializer gets an additional dispatchQueue argument (.main by default), and some DispatchSpecificKey is used to store some store's metadata in the DispatchQueue.

Thread safety is delegated to GCD if I understand correctly.

Previous