无法在 Release Schema 中运行 iOS React Native 应用程序
Posted
技术标签:
【中文标题】无法在 Release Schema 中运行 iOS React Native 应用程序【英文标题】:Cannot run iOS React Native app in Release Schema 【发布时间】:2016-11-29 19:54:00 【问题描述】:当我将我的 ios 项目切换到发布模式时(如 https://facebook.github.io/react-native/docs/running-on-device.html 所述),我收到此错误:
2016-11-29 11:49:01.621 [fatal][tid:main] 未提供脚本 URL。确保打包程序正在运行,或者您在应用程序中嵌入了 JS 包 bundle.unsanitizedScriptURLString:((null))
我需要在生产模式下创建一个静态 js 包吗?文档建议在早期的 React Native 文档中使用,但我正在运行 React Native 0.35(最初为 0.30)
【问题讨论】:
您是如何将您的应用从 0.30 升级到 0.35 的?之后你运行react-native upgrade
了吗?你的AppDelegate.m
应该是这样的:github.com/facebook/react-native/blob/master/local-cli/…
谢谢,我确实运行了 react-native 升级,我可以确认我有新的 RCTBundleURLProvider 代码:jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
当我尝试通过 react-native bundle --platform ios --dev false --entry-file index.ios.js --bundle-output iOS/main.jsbundle
手动捆绑应用程序时,我收到此错误:TransformError: [deleted]/node_modules/firebase/database.js: [deleted]/node_modules/firebase/database.js: Property consequent of ConditionalExpression expected node to be of a type ["Expression"] but instead got null
这可能是问题吗?
【参考方案1】:
终于解决了我的问题。按照docs 的建议,我正在使用 babel 插件来删除 console.log 语句。删除插件后一切正常
【讨论】:
+1 babel-plugin-transform-remove-console 也破坏了我的 RN 发布版本。遗憾的是,使用 babel-plugin-transform-remove-console 删除 Console.log statements 的 Facebook 指南 不起作用。 :-( babel-plugin-transform-remove-console 不适用于 RN github.com/facebook/react-native/issues/10412【参考方案2】:我们通过取消选中 XCode->Project Settings->Build Phases->Bundle React Native 代码和图像中的“仅在安装时运行脚本”来解决此问题
【讨论】:
【参考方案3】:看起来 Facebook 建议使用一个不起作用的 babel-plugin-transform-remove-console 解决方案: 见问题https://github.com/facebook/react-native/issues/10412
我认为在发布版本中自动删除 console.log 语句非常需要这样的东西。
【讨论】:
以上是关于无法在 Release Schema 中运行 iOS React Native 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 应用程序无法在 apk-release 中运行,但可以在调试模式下运行(即使在授予 Internet 权限后)
运行 ionic ios build --prod --release 时出错
无法在运行时将 schema.gql 写入 Google 的 App Engine NestJS
FileSystemWatcher 在作为 Release 运行时无法从两个目录获取事件