All right, I've messed around with this issue for 4 days and finally resolved with a script.
The setup
- RN 0.61.5 upgrading from 0.59.10
- Xcode 11.3.1
- multi-scheme (Staging, Beta)
- multi-configurations (Staging, Beta)
- CocoaPods 1.9.3
related npm packages:
"react-native": "0.61.5",
"@react-native-firebase/app": "^8.4.6",
"@react-native-firebase/auth": "^9.3.1",
"@react-native-firebase/crashlytics": "^8.4.11",
"@react-native-firebase/database": "^7.5.12",
"@react-native-firebase/messaging": "^7.9.1",
"react-native-code-push": "6.3.0",
"react-native-config": "1.4.0"
Guides and Sources Used:
Podfile:
platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
project 'lend24app',
'Debug' => :debug,
'Release' => :release,
'Staging' => :release,
'Beta' => :release
target 'lend24app' do
use_frameworks!
$RNFirebaseAsStaticFramework = true
# Pods for lendmn
pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
pod 'React', :path => '../node_modules/react-native/'
pod 'React-Core', :path => '../node_modules/react-native/'
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon"
pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
pod 'RNInputMask', :path => '../node_modules/react-native-text-input-mask/ios/InputMask'
pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'
permissions_path = '../node_modules/react-native-permissions/ios'
pod 'Permission-Camera', :path => "#{permissions_path}/Camera.podspec"
pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts.podspec"
pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID.podspec"
pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways.podspec"
pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse.podspec"
pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary.podspec"
pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications.podspec"
pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary.podspec"
pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders.podspec"
pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit.podspec"
pre_install do |installer|
installer.analysis_result.specifications.each do |s|
s.swift_version = '4.0' unless s.swift_version
end
# workaround for https://github.com/CocoaPods/CocoaPods/issues/3289
Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
installer.pod_targets.each do |pod|
if pod.name.eql?('RNPermissions') || pod.name.start_with?('Permission-')
def pod.build_type;
# Uncomment one line depending on your CocoaPods version
Pod::BuildType.static_library # >= 1.9
end
end
end
end
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
if config.name == 'Staging' || config.name == 'Beta'
config.build_settings['CONFIGURATION_TEMP_DIR'] = '$(PROJECT_TEMP_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)'
config.build_settings['CONFIGURATION_BUILD_DIR'] = '$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)'
end
end
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if config.name == 'Staging' || config.name == 'Beta'
config.build_settings['CONFIGURATION_TEMP_DIR'] = '$(PROJECT_TEMP_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)'
config.build_settings['PODS_CONFIGURATION_BUILD_DIR'] = '${PODS_BUILD_DIR}/Release$(EFFECTIVE_PLATFORM_NAME)'
end
end
end
end
target 'lend24appTests' do
inherit! :search_paths
# Pods for testing
end
use_native_modules!
end
This setup is outcome of gradual development of a project since 2016, so the items and actual configurations are not recommended, it's better to start from scrath!
Steps that lead to this issue, all steps fail to produce beta archive:
- upgrade rn through upgrade command
- patch up files missed through the command using RN Upgrade helper
- create Xcode configurations using above mentioned guide from Code Push
- unknown ...
somewhere along the journey I ended up with PODS_CONFIGURATION_BUILD_DIR
Build Setting that has ${PODS_BUILD_DIR}/Release$(EFFECTIVE_PLATFORM_NAME)
for Beta configuration
at this point Running Beta
build, but archiving fails with source: unbound variable
whenever I change PODS_CONFIGURATION_BUILD_DIR
to ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
or if I edit out the Podfile
fix for same PODS_CONFIGURATION_BUILD_DIR
change the build stage fails with
'React/RCTBridgeDelegate.h' file not found.
Digging through ...frameworks.sh
it is clear that Pods build is outputted to Release-iphoneos
folder while the rest is in Beta-iphoneos
due to the PODS_CONFIGURATION_BUILD_DIR
setting or something similar, I've tried changing to default values, but then builds fail even before reaching this Build Phase [CP] Embed Pods Frameworks
in the end I just moved everything from Release-iphoneos
to Beta-iphoneos
prior this phase using the following script:
+ New Run Script Phase
# Type a script or drag a script file from your workspace to insert its path.
if [[ "$CONFIGURATION" == "Debug" ]]; then
exit 0
elif [[ "$CONFIGURATION" == "Release" ]]; then
exit 0
fi
mv $BUILD_DIR/Release$EFFECTIVE_PLATFORM_NAME/* $BUILD_DIR/$CONFIGURATION$EFFECTIVE_PLATFORM_NAME/
Kinda tired here, just thought it might help anyone in similar situation, wish I could help more, feedback is welcome.
${EXPANDED_CODE_SIGN_IDENTITY:-}
to"${source:-}" ?
– PaulowniaProducts
directory in Pods project. @PaulBeusterien any ideas? I desperately need to get this working for my project. Any pointers would be highly appreciated. – Paulownia