источник: ошибка несвязанной переменной при использовании Cocoapods для Firebase

Я интегрировал Firebase и GoogleTagManager в свою цель приложения iOS с помощью Cocoapods. Когда я создаю свою цель, Xcode постоянно выдает ошибку:


Showing Recent Messages
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks 

mkdir -p /Users/xxx.xxx/Library/Developer/Xcode/DerivedData/MyApp-enzvpdzsyhjszqbnwiclnpszlyri/Build/Products/Debug-iphonesimulator/MyApp.app/Frameworks


/Users/xxx.xxx/Projects/MyApp/Applications/MyApp/Pods/Target Support Files/Pods-MyApp/Pods-MyApp-frameworks.sh: line 43: source: unbound variable


Command /bin/sh failed with exit code 1

Я несколько раз очищал свой проект, удалял папку с производными данными, но, похоже, ничего из этого не работает.

Мой подфайл выглядит так:

platform :ios, '11.0'

target 'MyApp' do

  use_frameworks!

  # Pods for MyApp
    pod 'Firebase/Core', '~> 5.19'
    pod 'Firebase/ABTesting'
    pod 'Firebase/Performance'
    pod 'Firebase/RemoteConfig'
    pod 'Firebase/Analytics'
    pod 'GoogleTagManager', '~> 7.1'
 end

Окружающая среда Cocoapods

CocoaPods : 1.5.3
        Ruby : ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
    RubyGems : 2.6.8
        Host : Mac OS X 10.14 (18A391)
       Xcode : 10.1 (10B61)
         Git : git version 2.17.2 (Apple Git-113)
Ruby lib dir : /Users/xxx.xxx/.rbenv/versions/2.4.0/lib
Repositories : master - https://github.com/CocoaPods/Specs.git @ 7c9a708dce25221eabc35ed39

Что мне не хватает в настройках моего проекта, что вызывает эту ошибку?

Я потратил несколько дней на поиски решения для SO / Cocoapods, но тщетно.

Любая помощь в этом отношении будет очень признательна.

Спасибо


person Tas    schedule 03.05.2019    source источник
comment
РЕДАКТИРОВАТЬ: CocoaPods: 1.6.1   -  person Tas    schedule 03.05.2019
comment
github.com/CocoaPods/CocoaPods/issues/   -  person Paul Beusterien    schedule 05.05.2019
comment
@PaulBeusterien, так что мне нужно применить то же исправление, что и ${EXPANDED_CODE_SIGN_IDENTITY:-}, к "${source:-}" ?   -  person Tas    schedule 06.05.2019
comment
Ошибка подавляется, когда я заменяю все вхождения $ {source} на $ {source: -} в файле Pods-Project-frameworks.sh, но фреймворки не создаются в каталоге Products в проекте Pods. @PaulBeusterien есть идеи? Мне отчаянно нужно, чтобы это работало для моего проекта. Будем очень признательны за любые указатели.   -  person Tas    schedule 06.05.2019


Ответы (3)


Кажется, это какая-то особенная проблема, возможно, связанная с bash или что-то в этом роде. По какой-то странной причине он не работает с каталогом ~ / Library /.../ MyApp-xxxxx ... / Build / Products / Release-iphoneos / (назовем его BUILD_DIR)

Если 'источник' не определен, как в данном случае, замена $ {source} на $ {source: -} не помогает, потому что в этом случае вместо источника помещается пробел, а это не то, что вам нужно.

Для меня другая проблема заключалась в том, что rsync не находит указанный выше каталог.

Вот что я сделал:

  1. Пусть проект построится и выдаст ошибку. Это гарантирует, что в моем BUILD_DIR созданы необходимые каталоги фреймворка и построены фреймворки.

  2. Создал каталог Pods-frameworks в корневом каталоге проекта, скопировал все каталоги framework из BUILD_DIR в этот каталог.

  3. В PodsMyApp-frameworks.sh, последние 25 строк, вызовы install_framework со всеми фреймворками, связанными с модулями, в режимах отладки и выпуска, изменили $ {BUILT_PRODUCTS_DIR} на новый макрос, который определен как новый каталог Pods-frameworks.

  4. Снова построил проекты.

Это решило проблему. Если модули устанавливаются снова и происходит изменение версии, этот процесс, возможно, придется повторить.

person Neeta Trivedi    schedule 24.07.2020
comment
вы должны не забыть повторить это изменение для PodsMyApp-frameworkds.sh, потому что каждый раз, когда вызывается pod install, этот файл восстанавливается с нуля. - person ochitos; 28.11.2020

Хорошо, я возился с этой проблемой в течение 4 дней и наконец решил с помощью скрипта.

Установка

  • RN 0.61.5 при обновлении с 0.59.10
  • Xcode 11.3.1
    • multi-scheme (Staging, Beta)
    • мультиконфигурации (Staging, Beta)
  • CocoaPods 1.9.3

связанные пакеты npm:

    "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"

Руководства и используемые источники:

Подфайл:

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

Эта настройка является результатом постепенного развития проекта с 2016 года, поэтому элементы и фактические конфигурации не рекомендуются, лучше начать с нуля!

Действия, которые приводят к этой проблеме, все шаги не приводят к созданию бета-архива:

  1. обновить rn с помощью команды обновления
  2. исправьте файлы, пропущенные с помощью команды, с помощью помощника по обновлению RN
  3. создавать конфигурации Xcode, используя вышеупомянутый руководство из Code Push
  4. неизвестный ...

где-то по пути я закончил с PODS_CONFIGURATION_BUILD_DIR Настройка сборки, в которой ${PODS_BUILD_DIR}/Release$(EFFECTIVE_PLATFORM_NAME) для бета-версии configuration

на этом этапе выполняется Beta сборка, но архивирование завершается неудачно с source: unbound variable

всякий раз, когда я меняю PODS_CONFIGURATION_BUILD_DIR на ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) или если я редактирую исправление Podfile для того же изменения PODS_CONFIGURATION_BUILD_DIR, этап сборки завершается с ошибкой

'React/RCTBridgeDelegate.h' file not found.

Копаясь в ...frameworks.sh, становится ясно, что сборка Pods выводится в Release-iphoneos папку, а остальная часть находится в Beta-iphoneos из-за параметра PODS_CONFIGURATION_BUILD_DIR или чего-то подобного, я пытался изменить значения по умолчанию, но затем сборки терпят неудачу даже до достижения этой фазы сборки [CP] Embed Pods Frameworks

в конце концов я просто переместил все с Release-iphoneos на Beta-iphoneos перед этим этапом, используя следующий сценарий:

+ 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/

Немного устал здесь, просто подумал, что это может помочь кому-нибудь в подобной ситуации, хотел бы я больше помогать, отзывы приветствуются.

person ochitos    schedule 28.11.2020

У меня была такая же проблема, когда мой фреймворк был построен на чипе M1. Я смог решить эту проблему, удалив ONLY_ACTIVE_ARCH из раздела установщика Podfile.

Поэтому я заменил это:

post_install do |installer|

installer.pods_project.targets.each do |target|

target.build_configurations.each do |config|
  config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
  config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'

 end
end

С этим:

post_install do |installer|

installer.pods_project.targets.each do |target|

target.build_configurations.each do |config|
  config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
 end
end

Примечание. Я добавил ['ONLY_ACTIVE_ARCH'] = 'NO' с самого начала, чтобы запустить мое приложение в симуляторе с проблемной структурой, когда структура была построена с использованием чипа, отличного от M1. Так что мне все еще нужна эта строка в зависимости от микросхемы машины сборки.

person EdiZ    schedule 11.03.2021