React Native AWS Amplify客户端始终无法使用Expo进行构建

mefy6pfw  于 2023-10-22  发布在  React
关注(0)|答案(1)|浏览(141)

按照以下步骤执行AWS Amplify documentation for Expo后,使用EAS构建的构建失败,

[RUN_FASTLANE] › Executing baseline » Bundle React Native code and images
[RUN_FASTLANE]     the transform cache was reset.
[RUN_FASTLANE] › Generating debug baseline » baseline.app.dSYM
[RUN_FASTLANE] ▸ ** ARCHIVE FAILED **
[RUN_FASTLANE] ▸ The following build commands failed:
[RUN_FASTLANE] ▸    PhaseScriptExecution Bundle\ React\ Native\ code\ and\ images /Users/Rax/Library/Developer/Xcode/DerivedData/baseline-hhrsifdg
[RUN_FASTLANE] ▸ (1 failure)
[RUN_FASTLANE] ** ARCHIVE FAILED **
[RUN_FASTLANE] 
[RUN_FASTLANE] 
[RUN_FASTLANE] The following build commands failed:
[RUN_FASTLANE]  PhaseScriptExecution Bundle\ React\ Native\ code\ and\ images /Users/Rax/Library/Developer/Xcode/DerivedData/baseline-xxxxxxx
[RUN_FASTLANE] (1 failure)
[RUN_FASTLANE] Exit status: 65
[RUN_FASTLANE] 
[RUN_FASTLANE] +-------------+-------------------------+
[RUN_FASTLANE] |           Build environment           |
[RUN_FASTLANE] +-------------+-------------------------+
[RUN_FASTLANE] | xcode_path  | /Applications/Xcode.app |
[RUN_FASTLANE] | gym_version | 2.205.2                 |
[RUN_FASTLANE] | sdk         | iPhoneOS15.2.sdk        |
[RUN_FASTLANE] +-------------+-------------------------+
[RUN_FASTLANE] Looks like fastlane ran into a build/archive error with your project
[RUN_FASTLANE] It's hard to tell what's causing the error, so we wrote some guides on how
[RUN_FASTLANE] to troubleshoot build and signing issues: https://docs.fastlane.tools/codesigning/getting-started/
[RUN_FASTLANE] Before submitting an issue on GitHub, please follow the guide above and make
[RUN_FASTLANE] sure your project is set up correctly.
[RUN_FASTLANE] fastlane uses `xcodebuild` commands to generate your binary, you can see the
[RUN_FASTLANE] the full commands printed out in yellow in the above log.
[RUN_FASTLANE] Make sure to inspect the output above, as usually you'll find more error information there
[RUN_FASTLANE] 
[RUN_FASTLANE] [!] Error building the application - see the log above
[RUN_FASTLANE] Error: Fastlane build failed with unknown error. Please refer to the "Run fastlane" and "Xcode Logs" phases.
Fastlane errors in most cases are not printed at the end of the output, so you may not find any useful information in the last lines of output when lo
[CLEAN_UP_CREDENTIALS] Destroying keychain - XXXXXXXXXX.keychain
[CLEAN_UP_CREDENTIALS] Removing provisioning profile

Build failed
Fastlane build failed with unknown error. Please refer to the "Run fastlane" and "Xcode Logs" phases.
Fastlane errors in most cases are not printed at the end of the output, so you may not find any useful information in the last lines of output when lo
    Error: npx exited with non-zero code: 1

步骤如下:
1.使用expo init关闭TypeScript并使用基本导航创建一个新项目。
1.使用

expo install aws-amplify aws-amplify-react-native @react-native-community/netinfo  @react-native-async-storage/async-storage @react-native-picker/picker

安装AWS Amplify依赖项
1.使用amplify pull提取我的AWS Amplify项目,并进行以下选择:

? Select the authentication method you want to use: AWS profile
? Please choose the profile you want to use amplify-cli
? Which app are you working on? XXXXXXXX
Backend environment 'dev' found. Initializing...
? Choose your default editor: IntelliJ IDEA
? Choose the type of app that you're building javascript
Please tell us about your project
? What javascript framework are you using react-native
? Source Directory Path:  /
? Distribution Directory Path: /
? Build Command: eas build --profile development --platform ios --local
? Start Command: expo start --dev-client

1.将指定的AWS Amplify样板文件添加到App.tsx

import { Amplify } from 'aws-amplify'
import awsconfig from 'aws-exports'

Amplify.configure(awsconfig)

1.使用

eas build --profile development --platform ios --local

构建

{
  "name": "amptest",
  "version": "1.0.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject",
    "test": "jest --watchAll"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@expo/vector-icons": "^13.0.0",
    "@react-native-async-storage/async-storage": "^1.17.4",
    "@react-native-community/netinfo": "8.2.0",
    "@react-native-picker/picker": "2.4.0",
    "@react-navigation/bottom-tabs": "^6.0.5",
    "@react-navigation/native": "^6.0.2",
    "@react-navigation/native-stack": "^6.1.0",
    "aws-amplify": "^4.3.22",
    "aws-amplify-react-native": "^6.0.4",
    "expo": "~45.0.0",
    "expo-asset": "~8.5.0",
    "expo-constants": "~13.1.1",
    "expo-dev-client": "~0.9.5",
    "expo-font": "~10.1.0",
    "expo-linking": "~3.1.0",
    "expo-splash-screen": "~0.15.1",
    "expo-status-bar": "~1.3.0",
    "expo-system-ui": "~1.2.0",
    "expo-web-browser": "~10.2.0",
    "react": "17.0.2",
    "react-dom": "17.0.2",
    "react-native": "0.68.2",
    "react-native-safe-area-context": "4.2.4",
    "react-native-screens": "~3.11.1",
    "react-native-web": "0.17.7"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@types/react": "~17.0.21",
    "@types/react-native": "~0.66.13",
    "jest": "^26.6.3",
    "jest-expo": "~45.0.0",
    "react-test-renderer": "17.0.2",
    "typescript": "~4.3.5"
  },
  "private": true
}
gkn4icbw

gkn4icbw1#

我已经找到了问题的原因,这只能通过改变AWS Amplify的工作方式来完全解决。

问题

AWS Amplify将aws-exports.js添加到由#amplify-do-not-edit-begin/end限定的部分中的.gitignore。这是有意义的,因为该文件包含API密钥。但不管合理与否,这都是一个问题。AWS Amplify无法与eas build或其他使用Git识别项目文件的工具一起使用。

短期固定

手动禁用忽略(例如与!aws-exports.js)使aws-exports.js可用于eas build。(Using .easignore也是一种可能性,但它有缺点,可能是矫枉过正。)

  • 长期解决方案 *

很明显,对于任何真实的世界项目来说,上述内容都不是一个长期的解决方案,因为尽管文档中说)aws-exports.js包含敏感信息,确实应该被Git忽略。相反,AWS Amplify需要能够使用以下方法:

  • 不要git-ignore aws-exports.js
  • 使用环境变量替换aws-exports.js中的敏感信息值,这些环境变量(i)由AWS在后端自动管理(例如,用于托管构建),(ii)由用户在其他环境中以通常的方式设置(例如,CI,本地构建等)。

事实上,感觉Amplify是为Web托管应用程序设计的(例如,aws-exports.jsgets regenerated for them),但移动的应用程序的场景没有考虑周全。

相关问题