Description
When creating a multiplatform SwiftUI project in Xcode with different deployment targets for macOS and iOS, there is an issue with the @Perception.Bindable macro applied to StoreOf<MyReducer> inside a view.
Problem
On macOS 12.0, @Perception.Bindable is required.
On iOS 17.0, @Perception.Bindable is hard-deprecated and requires @Bindable instead.
This leads to a conflicting requirement that prevents a single universal codebase. One possible workaround is using #if canImport(AppKit):
#if canImport(AppKit)
@Perception.Bindable
private var store: StoreOf<MyReducer>
#else
@Bindable
private var store: StoreOf<MyReducer>
#endif
However, this introduces a secondary issue.
Secondary Issue
When using @ViewAction(for:), it fails to process this conditional property declaration and throws the following error:
@ViewAction requires 'MyView' to have a 'store' property of type 'Store'
This suggests that @ViewAction(for:) does not properly recognize the conditionally defined store property.
Expected Behavior
Composable Architecture should provide a way to:
- Support both
@Perception.Bindable (for older macOS targets) and @Bindable (for newer iOS versions).
- Ensure
@ViewAction(for:) can work correctly in a multiplatform environment.
Composable Architecture Version: 1.18
Xcode Version: 16.2
Any guidance on how to handle this case in a clean and maintainable way would be appreciated.
Checklist
Description
When creating a multiplatform SwiftUI project in Xcode with different deployment targets for macOS and iOS, there is an issue with the
@Perception.Bindablemacro applied toStoreOf<MyReducer>inside a view.Problem
On macOS 12.0,
@Perception.Bindableis required.On iOS 17.0,
@Perception.Bindableis hard-deprecated and requires@Bindableinstead.This leads to a conflicting requirement that prevents a single universal codebase. One possible workaround is using
#if canImport(AppKit):However, this introduces a secondary issue.
Secondary Issue
When using
@ViewAction(for:), it fails to process this conditional property declaration and throws the following error:@ViewAction requires 'MyView' to have a 'store' property of type 'Store'This suggests that
@ViewAction(for:)does not properly recognize the conditionally defined store property.Expected Behavior
Composable Architecture should provide a way to:
@Perception.Bindable(for older macOS targets) and@Bindable(for newer iOS versions).@ViewAction(for:)can work correctly in a multiplatform environment.Composable Architecture Version: 1.18
Xcode Version: 16.2
Any guidance on how to handle this case in a clean and maintainable way would be appreciated.
Checklist
mainbranch of this package.