Currently I'm working on integrating the firebase cloud messaging service to a react native mobile application. I followed their documentation on firebase integration and edited the pod file to use frameworks.
When using the frameworks. I got an error about transitive dependencies. that's why I had to add pre install do and $static_framework.
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/#react-native-community/cli-platform-ios/native_modules'
platform :ios, '11.0'
$RNFirebaseAsStaticFramework = true
target 'P2PMobileApp' do
use_frameworks!
$static_framework = ['FlipperKit', 'Flipper', 'Flipper-Folly', 'CocoaAsyncSocket', 'ComponentKit', 'DoubleConversion', 'glog', 'Flipper-PeerTalk', 'Flipper-RSocket', 'Yoga', 'YogaKit', 'CocoaLibEvent', 'OpenSSL-Universal', 'boost-for-react-native']
pre_install do |installer|
Pod::Installer::Xcode::TargetValidator.send(:define_method,:verify_no_static_framework_transitive_dependencies) {}
installer.pod_targets.each do |pod|
if $static_framework.include?(pod.name)
def pod.build_type;
Pod::BuildType.static_library
end
end
end
end
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'
target 'P2PMobileAppTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
# use_flipper!()
post_install do |installer|
react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end
Now I'm having following error when I try to run app with react-native run-ios
Undefined symbols for architecture x84_64:
"google::LogMessage::LogMessage(char const*, int, int)", referenced from:
__react_native_log_default in react_native_log.o
"google::LogMessageFatal::LogMessageFatal()", referenced from:
__react_native_log_default in react_native_log.o
...
Note: I have done my pod installation with arch -x86_64 pod install because I'm working on a mac mini with an M1 chip.
I tried to resolve that issue with the following solutions. But none of them worked out
Link binaries with xcode
Changing the architecture
Change the architecture for pod installation (Then I get the same issue related to arm64)
Removing glog from $static_framwork variable (Then the same Undefined symbols for architecture x84_64: issue arises for double conversion module)
Still I,m stuck with build fails. Any help on this will be highly appreciated.
If you are using M1 chip then it can be resolved with below steps:
Go to application > right click on Xcode > Get info > select Open using Rosetta
Restart the system
The other solution can be adding library
You can add it by:
Clicking on your project in the upper left of the left pane (the blue
icon).
In the middle pane, click on the Build Phases tab.
Under "Link Binary With Libraries", click on the plus button.
Find YOUR_FRAMEFOERK.framework from the list and hit Add.
Related
After upgrading react-native package from 0.63.4 to 0.64.4 I got following errors in Xcode (on MacBook Pro M1) while building and running the app on simulator and device:
I tried to it with and without using flipper, but nothing helped.
Also added CoreFoundation and Foundation Framework manually to the project and ran Xcode with and without Rosetta enabled.
This is my current PodFile:
source 'https://github.com/CocoaPods/Specs.git'
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/#react-native-community/cli-platform-ios/native_modules'
platform :ios, '12.0'
target 'MyApp' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
pod 'react-native-netinfo', :path => '../node_modules/#react-native-community/netinfo'
pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'
permissions_path = '../node_modules/react-native-permissions/ios'
pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
pod 'Permission-AppTrackingTransparency', :path => "#{permissions_path}/AppTrackingTransparency"
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
#use_flipper!()
post_install do |installer|
react_native_post_install(installer)
end
end
My working solution for this is to create a new, clean project with the version you want to upgrade to.
Afterwards do following steps:
Open both .xcworkspace files in Xcode
Head over to your Targets Build Settings
Search for "Header Search Paths"
Copy all Header Search Paths from new Project to your project you want to upgrade
Remove DerivedData, Clean Build and Run again
Run pod install. Maybe you need to upgrade some packages
Additionally a nice npm script for rebuilding .xcworkspace (Replace "[PRJECT_NAME]" with your .xcworkspace name):
"renew-pods-m1": "cd ios; rm -rf ~/Library/Caches/CocoaPods; rm -rf Pods; rm -rf [PROJECT_NAME].xcworkspace; rm -rf ~/Library/Developer/Xcode/DerivedData/*; pod deintegrate; pod setup; arch -x86_64 pod install;"
Note: Have a look at your PodFile. Maybe you need to change the use_react_native implementation and add the post_install script
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
At the end of the PodFile
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
#use_flipper!()
post_install do |installer|
react_native_post_install(installer)
end
For me it was Flipper. I wasn't using it in my old project, and it was automatically enabled in my new one. Just comment out the line in your Podfile if your project doesn't require it.
# :flipper_configuration => FlipperConfiguration.enabled,
I am able to build and run the app in a simulator. However, whenever I want to archive it (selecting any ios devices) to release the app into the AppStore, I am getting this error.
ld: warning: directory not found for option '-L/Users/bigyankarki/Library/Developer/Xcode/DerivedData/Neex-dnesybikpygafkfxhimxsgrjawis/Build/Intermediates.noindex/ArchiveIntermediates/Neex/BuildProductsPath/Release-iphoneos/React-RCTVibration'
ld: warning: directory not found for option '-L/Users/bigyankarki/Library/Developer/Xcode/DerivedData/Neex-dnesybikpygafkfxhimxsgrjawis/Build/Intermediates.noindex/ArchiveIntermediates/Neex/BuildProductsPath/Release-iphoneos/react-native-safe-area-context'
ld: library not found for -lReact-RCTVibration
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I have followed this, and other multiple solutions with the same library not found error, but to no avail. I even included it to podfile,
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/#react-native-community/cli-platform-ios/native_modules'
platform :ios, '12.4'
target 'Neex' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
pod 'RNCAsyncStorage', :path => '../node_modules/#react-native-async-storage/async-storage'
pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'
pod 'RNSVG', :path => '../node_modules/react-native-svg'
target 'NeexTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
use_flipper!()
post_install do |installer|
react_native_post_install(installer)
end
end
and even linked it in buildphase, but none works.
I solved the problem by setting 'Build setting architectures only' to Yes for both release and debug. After that, the problem seems to be resolved and I was able to archive the app.
I have my build working fine on ios simulators, but when I plug in my iphone and run react-native run-ios --device "Max’s Iphone 12 Mini", the build fails. Error Below from rn cli below.
The following build commands failed:
Ld /Users/maxmandia/Library/Developer/Xcode/DerivedData/musicplace_ios-aaznfqkkkkeeldftonqjsqawrhgr/Build/Products/Debug-iphoneos/RCT-Folly/folly.framework/folly normal (in target 'RCT-Folly' from project 'Pods')
When I try to run the app in xcode, I get another error:
ld: -U and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
Here is my pod file
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/#react-native-community/cli-platform-ios/native_modules'
platform :ios, '12.4'
install! 'cocoapods', :deterministic_uuids => false
target 'musicplace_ios' do
use_frameworks!
config = use_native_modules!
# Flags change depending on the env values.
flags = get_default_flags()
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => flags[:hermes_enabled],
:fabric_enabled => flags[:fabric_enabled],
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
target 'musicplace_iosTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
# use_flipper!()
post_install do |installer|
react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end
Any help would be great! I tried disabling bitcode and it still showed ENABLE_BITCODE=YES in the error message - cleaned my build folder too. Really out of idea right now.
I keep getting the following error from multiple pods when building my react native project in xcode. Some example pods include RNKeychain and RNSVG. Here’s an example from react-native-blur:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_RCTViewManager", referenced from:
_OBJC_CLASS_$_BlurViewManager in BlurViewManager.o
_OBJC_CLASS_$_VibrancyViewManager in VibrancyViewManager.o
I noticed some warnings about iOS versions such as 'UIBlurEffectStyleSystemChromeMaterial' is only available on iOS 13.0 or newer.
Digging into xcode, for some reason the "General -> Deployment Info" for each pod is set to iOS 11.0 but in my Podfile I have explicitly set the deployment target to platform :ios, '13.0'. It's widely accepted as the solution to add a post_install script to overwrite the deployment target of each individual pod, which I've done. See my Podfile below.
$RNFirebaseAsStaticFramework = true
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/#react-native-community/cli-platform-ios/native_modules'
platform :ios, '13.0'
target 'Foo' do
use_frameworks!
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
target 'FooTests' do
inherit! :complete
# Pods for testing
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
end
end
react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end
I can fix the issue by manually adjusting the deployment target in xcode for each offending pod which complains with the error Undefined symbols for architecture x86_64:
What else could be overwriting the deployment info to ios 11.0? In case it's relevant using "react-native": "0.66.1",
The most infuriating thing is that every time I do pod install I have to manually tweak deployment info for each affected pod.
I want to build my Xcode project (react native & swift) for the simulator and on a real device.
The simulator worked great. Today I tried to build it for my device, I selected my device in the Xcode bar and added the scheme to release (I had to do this because I'm using react native and otherwise the bundle is not packed)
Then an error during the build occurs (in this case for the dependency RNPurchases, but this is completely random. sometimes it's Expo-Keep-Awake or Facebook)
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_RCPurchases", referenced from:
objc-class-ref in RNPurchases.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Even switching the back to Build Configuration Debug in my scheme has no effect anymore.
I already tried several things:
clear Xcode build
delete pod folder
remove pod cache
remove Xcode/DerivedData
reboot
nothing works.
This problem is pretty new to me, it already occurred twice within the last 2 months. Somehow I got the build for the simulator running again, but never for a device. I didn't have the problems like this half a year ago ...
My Setup
Xcode 12.4
MacBook Pro (Big Sur 11.2.3)
Build Settings for App-Target: Build Active Architectures Only: Debug YES, Release NO)
Build Settings for Pod-Target: Build Active Architectures Only: Debug YES, Release NO)
Podfile:
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/#react-native-community/cli-platform-ios/native_modules'
require_relative '../node_modules/react-native-unimodules/cocoapods.rb' # expo uni modules
use_frameworks!
install! 'cocoapods', :deterministic_uuids => false, :warn_for_unused_master_specs_repo => false
target 'TrainUrTeam' do
platform :ios, '12.0'
# ... pods xyz
use_unimodules!
config = use_native_modules!
use_react_native!(:path => config["reactNativePath"])
end
post_install do |installer| # src: https://stackoverflow.com/a/64139830/6003494
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
end
end
end
After 2 weeks of googling I could finally find a working solution according to this Post adding this to the Podfile:
use_frameworks! :linkage => :static
If use_frameworks! :linkage => :static is not an option for you, you may try to use:
pre_install do |installer|
installer.pod_targets.each do |pod|
if pod.name.eql?('RNPurchases')
def pod.build_type;
Pod::BuildType.static_library # pods version >= 1.9
# Pod::Target::BuildType.static_library # pods version < 1.9
end
end
end
end
I got these errors and just restarted my macbook, clean, then build and they disappeared. Magic.
Go to xcode project -> Build setting -> Architecture -> Excluded
architecture -> (arm64)set
Try to build & run