Expo EAS Build iOS 失败:尝试初始化具有未知 UUID 的对象

Expo EAS Build iOS Failed: Attempted to initialize an object with an unknown UUID

我知道 Whosebug 上有几个人问过类似的问题,但他们没有使用 expo 来构建他们的项目,所以使用 XCode 的解决方案不适用于我。

我正在尝试使用命令 eas build --profile development --platform ios 构建我的 expo 项目,但它一直失败并显示错误 [stderr] [!] <PBXResourcesBuildPhase UUID=13B07F8E1A680F5B00A75B9A>attempted to initialize an object with an unknown UUID.5360B39C71704D31869D9F73for attribute:files. This can be the result of a merge and the unknown UUID is being discarded.

其他人提出的降级到SDK版本43等相关解决方案对我不起作用。我希望有人可以查看我的错误跟踪堆栈,看看可能是什么问题。我附上了我的 package.json、Podfile、环境信息,以及我的错误图像。

如果有人能帮我解决这个问题,那就太好了,因为这已经使我的应用程序开发持续了大约一个星期。我还在 GitHub 上添加了这个问题,但我没有得到回应,我真的需要快速帮助才能继续开发。以下是链接:

GitHub Link - SDK Version 44

GitHub Link - SDK Version 43

环境:

System:
OS: macOS 12.2.1
Shell: 5.8 - /bin/zsh
Binaries:
Node: 16.3.0 - /opt/homebrew/bin/node
Yarn: 1.22.10 - /opt/homebrew/bin/yarn
npm: 8.3.0 - /opt/homebrew/bin/npm
Watchman: 2022.01.31.00 - /opt/homebrew/bin/watchman
Managers:
CocoaPods: 1.11.3 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 21.4, iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5
IDEs:
Xcode: 13.3/13E113 - /usr/bin/xcodebuild
npmPackages:
expo: ^44.0.0 => 44.0.6
react: 17.0.1 => 17.0.1
react-dom: 17.0.1 => 17.0.1
react-native: 0.64.3 => 0.64.3
react-native-web: 0.17.1 => 0.17.1
npmGlobalPackages:
eas-cli: 0.47.0
expo-cli: 5.3.0
Expo Workflow: bare

package.json

{
  "name": "yourhud",
  "version": "1.0.0",
  "scripts": {
    "start": "expo start --dev-client",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "eject": "expo eject"
  },
  "dependencies": {
    "@config-plugins/react-native-ble-plx": "^0.0.2",
    "@expo-google-fonts/be-vietnam": "^0.2.0",
    "@expo-google-fonts/dev": "^0.2.0",
    "@expo-google-fonts/heebo": "^0.2.2",
    "@expo-google-fonts/hind-siliguri": "^0.2.2",
    "@expo-google-fonts/inter": "^0.2.2",
    "@expo-google-fonts/josefin-sans": "^0.2.2",
    "@expo-google-fonts/lato": "^0.2.2",
    "@expo-google-fonts/michroma": "^0.2.0",
    "@expo-google-fonts/montserrat": "^0.2.0",
    "@expo-google-fonts/nunito": "^0.2.0",
    "@expo-google-fonts/open-sans": "^0.2.2",
    "@expo-google-fonts/orbitron": "^0.2.2",
    "@expo-google-fonts/oswald": "^0.2.2",
    "@expo-google-fonts/overpass": "^0.2.2",
    "@expo-google-fonts/poppins": "^0.2.2",
    "@expo-google-fonts/prompt": "^0.2.2",
    "@expo-google-fonts/quicksand": "^0.2.0",
    "@expo-google-fonts/raleway": "^0.2.0",
    "@expo-google-fonts/rubik": "^0.2.0",
    "@expo-google-fonts/varela-round": "^0.2.2",
    "@expo-google-fonts/work-sans": "^0.2.2",
    "@mapbox/polyline": "^1.1.1",
    "@miblanchard/react-native-slider": "^2.1.0",
    "@react-native-async-storage/async-storage": "~1.15.0",
    "@react-native-community/geolocation": "^2.0.2",
    "@react-native-picker/picker": "2.2.1",
    "@react-navigation/drawer": "^6.1.8",
    "@react-navigation/material-top-tabs": "^6.0.6",
    "@react-navigation/native": "^6.0.6",
    "@react-navigation/native-stack": "^6.2.5",
    "@types/haversine": "^1.1.5",
    "@types/mapbox__polyline": "^1.0.2",
    "@types/react-native-base64": "^0.2.0",
    "@types/react-native-linear-gradient": "^2.4.0",
    "@types/react-native-snap-carousel": "^3.8.5",
    "@types/react-native-version-check": "^3.4.4",
    "axios": "^0.24.0",
    "dotenv": "^10.0.0",
    "eas-cli": "0.49.0",
    "expo": "^44.0.0",
    "expo-app-loading": "~1.3.0",
    "expo-av": "~10.2.0",
    "expo-brightness": "~10.1.0",
    "expo-dev-client": "~0.8.4",
    "expo-device": "~4.1.0",
    "expo-font": "~10.0.4",
    "expo-in-app-purchases": "~12.1.0",
    "expo-linear-gradient": "~11.0.3",
    "expo-linking": "~3.0.0",
    "expo-location": "~14.0.1",
    "expo-notifications": "~0.14.0",
    "expo-permissions": "~13.1.0",
    "expo-sensors": "~11.1.0",
    "expo-speech": "~10.1.0",
    "expo-splash-screen": "~0.14.1",
    "expo-status-bar": "~1.2.0",
    "expo-task-manager": "~10.1.0",
    "haversine": "^1.1.1",
    "luxon": "^2.2.0",
    "react": "17.0.1",
    "react-dom": "17.0.1",
    "react-native": "0.64.3",
    "react-native-anchor-point": "^1.0.6",
    "react-native-base64": "^0.2.1",
    "react-native-ble-plx": "^2.0.3",
    "react-native-bouncy-checkbox": "^2.1.9",
    "react-native-color-matrix-image-filters": "^5.2.14",
    "react-native-dotenv": "^3.3.1",
    "react-native-dropdown-picker": "^5.3.0",
    "react-native-email": "^1.1.0",
    "react-native-gesture-handler": "~2.1.0",
    "react-native-google-places-autocomplete": "^2.4.1",
    "react-native-html-parser": "^0.1.0",
    "react-native-numeric-input": "^1.9.0",
    "react-native-obd2": "^0.0.2",
    "react-native-pager-view": "5.4.9",
    "react-native-picker-select": "^8.0.4",
    "react-native-progress": "^5.0.0",
    "react-native-reanimated": "~2.3.1",
    "react-native-render-html": "^6.3.4",
    "react-native-safe-area-context": "3.3.2",
    "react-native-screens": "~3.10.1",
    "react-native-shake": "^5.1.1",
    "react-native-snap-carousel": "^3.9.1",
    "react-native-speedometer": "^1.0.5",
    "react-native-svg": "12.1.1",
    "react-native-swiper": "^1.6.0",
    "react-native-tab-view": "^3.1.1",
    "react-native-track-player": "^2.1.3",
    "react-native-triangle": "^0.0.9",
    "react-native-tts": "^4.1.0",
    "react-native-version-check": "^3.4.2",
    "react-native-web": "0.17.1",
    "shortid": "^2.2.16",
    "use-places-autocomplete": "^1.11.0"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@types/jest": "^27.4.0",
    "@types/luxon": "^2.0.9",
    "@types/react": "~17.0.21",
    "@types/react-native": "~0.64.12",
    "@types/react-test-renderer": "^17.0.1",
    "@types/shortid": "^0.0.29",
    "typescript": "~4.3.5"
  },
  "private": true
}

播客文件

require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")

platform :ios, '12.0'

require 'json'
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}

target 'YourHUD' do
  use_expo_modules!
  config = use_native_modules!

  pod 'expo-dev-launcher', path: '../node_modules/expo-dev-launcher', :configurations => :debug
  pod 'expo-dev-menu', path: '../node_modules/expo-dev-menu', :configurations => :debug
# @generated begin pre_installer - expo prebuild (DO NOT MODIFY) sync-c8812095000d6054b846ce74840f0ffb540c2757
  pre_install do |installer|
# @generated begin @react-native-mapbox-gl/maps-pre_installer - expo prebuild (DO NOT MODIFY) sync-5a7ed0a20d5aff2d61639bc5bb4fd5551233d57c
    $RNMBGL.pre_install(installer)
# @generated end @react-native-mapbox-gl/maps-pre_installer
  end
# @generated end pre_installer
  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes'
  )

  # Uncomment to opt-in to using Flipper
  #
  # if !ENV['CI']
  #   use_flipper!('Flipper' => '0.75.1', 'Flipper-Folly' => '2.5.3', 'Flipper-RSocket' => '1.3.1')
  # end

  post_install do |installer|
    react_native_post_install(installer)

    # Workaround `Cycle inside FBReactNativeSpec` error for react-native 0.64
    # Reference: https://github.com/software-mansion/react-native-screens/issues/842#issuecomment-812543933
    installer.pods_project.targets.each do |target|
      if (target.name&.eql?('FBReactNativeSpec'))
        target.build_phases.each do |build_phase|
          if (build_phase.respond_to?(:name) && build_phase.name.eql?('[CP-User] Generate Specs'))
            target.build_phases.move(build_phase, 0)
          end
        end
      end
    end
  end

  post_integrate do |installer|
    begin
      expo_patch_react_imports!(installer)
    rescue => e
      Pod::UI.warn e
    end
  end

end

构建日志:

部分归功于@brentvatne 的帮助,我找到了答案。该问题实际上与错误日志底部的 [stderr] 无关,其中显示 <PBXResourcesBuildPhase UUID=13B07F8E1A680F5B00A75B9A> attempted to initialize an object with an unknown UUID. 事实上,该问题与警告 undefined method pre_install for nil:NilClass 有关。如果您查看 Podfile,行 $RNMBGL.pre_install(installer) 需要 $RNMBGL 对象存在,但这是由我之前安装的 @react-native-mapbox-gl/maps-pre_installer 提供的,但在 [=19] 之前卸载了=] 构建。因此,错误不断弹出说 pre_install 无法完成,这都是因为在构建时没有下载 Podfile 中该行的相应包。