【问题标题】:How to build .ipa for React Native?如何为 React Native 构建 .ipa?
【发布时间】:2016-05-30 07:36:28
【问题描述】:

我在没有 iOS 开发经验的情况下来到 React Native 开发。我想构建发布。 .ipa 文件 - 理想情况下来自命令行,但官方文档 Running On Device 非常简短。

我能够通过 XCode 在我的 iPhone 上手动部署应用程序,但我仍然找不到任何“发布 IPA”文件。我用#ifdef DEBUG 指令更新了我的代码,使其更通用。

有没有办法仅通过命令行以发布模式构建应用程序?如果不是,生成 RN 申请的“官方”方式是什么?

我目前使用的是 RN 0.20。

【问题讨论】:

标签: ios iphone react-native command-line ipa


【解决方案1】:

iOS

  1. 在您的根文件夹中使用以下简单命令使用 Xcode 打开 iOS 项目。

    xed ./ios
    
  2. 现在将以下命令粘贴到终端中

    react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios
    

  3. 像这样从 Xcode 编辑方案:

    产品 -> 方案 -> 编辑方案

    编辑要发布的方案

现在您有了一个独立的 Xcode 项目,可以像原生 Xcode 项目一样构建/发布。

来自:https://medium.com/better-programming/create-ipa-and-apk-from-react-native-72fe53c6a8db

【讨论】:

    【解决方案2】:

    您必须将 Scheme 设置为 Release。

    从文档中你有两种方法。

    为此,请转到产品 → 方案 → 编辑方案 (cmd +

    您还可以使用 React Native CLI 执行此操作,使用选项 --configuration 和值 Release(例如 react-native run-ios --configuration Release)。

    然后你可以像往常一样生成你的存档。

    https://facebook.github.io/react-native/docs/running-on-device.html#building-your-app-for-production

    【讨论】:

    • 这是正确的更新答案,其他都是旧的
    • @jperelli 这个命令是在模拟器上运行的,它会启动一个模拟器,产品是'Release-iphonesimulator',而不是'Release-iphoneos'。
    • 这是回答如何运行,而不是如何构建。 React 社区中的每个人似乎都误会了这两件事
    【解决方案3】:

    首先,您需要以这种方式创建一个包:

    react-native bundle --dev false --entry-file index.ios.js --bundle-output ios/main.jsbundle --platform ios
    

    然后,您必须在 AppDelegate.m 中注释此行:

    jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
    

    并取消注释:

    jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
    

    然后你必须去 Product -> 在 Xcode 中存档并根据你想要的版本按照步骤操作

    【讨论】:

    • 你知道我可以在存档的哪里找到 .ipa 文件吗?
    • 请注意,如果产品 > 存档不可用,请确保您已选择“通用 iOS 设备”作为您的目的地,而不是模拟器之一。
    • 您需要注册为苹果开发人员才能创建.ipa,然后转到产品>存档>导出...但是,这回答了我关于如何实际创建生产版本的问题,非常感谢 G. Hamaide
    • 我在 AppDelegate.m 中只有这个字符串: jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];我应该评论/取消评论什么?
    • 此答案已过时 - 当前版本的 RN 在 xcode 构建过程中有一个自定义 shell 脚本,该脚本会自动为您运行捆绑,因此不再需要。
    【解决方案4】:

    我无法评论上述答案, 这是正确的,但您需要从以下命令开始才能使其工作:

    react-native bundle --dev false --entry-file index.ios.js --bundle-output ios/main.jsbundle --platform ios
    

    区别在于“ios”而不是“iOS”

    否则会报如下错误:

    ProjectPath/node_modules/promise/lib/done.js:10
      throw err;
      ^
    

    【讨论】:

    • 您回复哪个答案? “上面”是相对的
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 2020-07-02
    • 2017-06-17
    • 2020-08-26
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多