Open cipolleschi opened 8 months ago
Hi, I just got this issue as well. I need this to be able to use CocoaAsyncSocket library. Any workaround/solution?
No workaround / solution at the moment. For my own knowledge, what kind of issue do you run into when you try to use something like CocoaAsyncSocket without frameworks?
https://github.com/robbiehanson/CocoaAsyncSocket
According to their instructions, if I want to run it from swift I need to add the framework:
use_frameworks! # Add this if you are targeting iOS 8+ or using Swift
pod 'CocoaAsyncSocket'
Without adding the framework, Swift simply cannot find the lib.
But it's ok, since I just downloaded the source code and linked it manually to the project. TCP works fine, thx for the help.
Environment
Steps to reproduce the bug
I was helping out @shwanton in supporting use_frameworks! in react-native-macos.
I managed to have them working with
:linkage => :static
and the Old Architecture in this PR.I then started looking into
:linkage => :dynamic
in the Old Architecture and I hit a wall. MacOS has some circular dependencies that needs to be fixed as dynamic frameworks need to be able to build in isolation and circular dependencies prevent that, unfortunately.The two dependencies I found are: First
RCTView
depends onRCTText
becauese of thisRCTText
depends onReact-Core
because of thisReact-Core
ownsRCTView
, thus, the circular dependencySecond
RCTTouchHandler
depends onRCTText
because of thisRCTText
depends onReact-Core
because of thisReact-Core
ownsRCTView
, thus, the circular dependency.There are various way that we can use to break those:
React-Core
, make theRCTText
classes conform to them and use them to decide what to do.RCTText
classes exposes some specific selector that are custom to them, we can use that instead of the class nameRCTText
classes has some values we can leverage at runtime to make the decision, we can use them.Expected Behavior
Being able to build with
use_frameworks!, :linkage => :dynamic
Actual Behavior
Fails to build
Reproducible Demo
git clone https://github.com/microsoft/react-native-macos
cd react-native-macos
yarn
cd packages/rn-tester
bundle install
NO_FLIPPER=1 USE_FRAMEWORKS=dynamic bundle exec pod install
open RNTestProject.xcworkspace
Additional context
On mobile, use_frameworks! is a requirement for Firebase, for example. Perhaps Firebase is not compatible with MacOS? Or aren't there libraries which requires that to be turned on?
Enabling and supporting Swift, requires a folder structure which is exactly the one enforced by frameworks (Clang modules) so it make sense to make sure we support it.
Dynamic frameworks will also catch those circular dependencies automatically!