如何为 React Native 构建 .ipa?

Posted

技术标签:

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

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

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

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

我目前使用的是 RN 0.20。

【问题讨论】:

How to build and deploy a react-native app from command line?的可能重复 正如我已经提到的,我已经使用了#ifdef 技巧。不幸的是,另一个问题没有提到如何构建它(除了fastlane 是可能的)。 【参考方案1】:

iOS

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

    xed ./ios
    

    现在将以下命令粘贴到终端中

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

    像这样从 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;
  ^

【讨论】:

您回复哪个答案? “上面”是相对的

以上是关于如何为 React Native 构建 .ipa?的主要内容,如果未能解决你的问题,请参考以下文章

如何为模拟器构建 react-native 缩小的“产品”应用程序?

如何为 React Native Bare 工作流指定重定向 URI

开发者如何为React Native选择合适的数据库

使用 xcode 从 react native 导出 ipa

如何为 React Native 锁定设备方向

如何为 React Native 嵌套组件创建 Typescript 定义