react-native 创建一个具有新架构的模块并包含一个 .swift 文件引入编译器错误

uyto3xhc  于 8个月前  发布在  React
关注(0)|答案(9)|浏览(169)

描述

我正在升级我们其中一个使用Swift编写逻辑的开源库。然而,当我在podspec source_files中包含swift时,我遇到了编译器错误。

重现步骤

我在更新模块的podspec以在ios/目录中包含.swift文件后遇到了编译器错误。

  1. s.source_files = "ios/**/*.{h,m,mm,cpp,swift}" <--- adding Swift

构建开发pod后,我得到了这个错误:

我找到了一个解决方法,即省略以下内容:
1.

  1. s.source_files = "ios/**/*.{h,m,mm,cpp}" <--- remove swift
  1. run bundle exec pod install
    1.手动添加.swift文件

构建项目后,没有编译器错误。这对于测试来说很好,但我需要更新podspec以将文件包含在Compile Sources中,否则,还会出现其他错误。

React Native版本

0.74.0

受影响的平台

运行时-iOS

领域

TurboModule - 新的本地模块系统

npx react-native info的输出

  1. System:
  2. OS: macOS 14.4.1
  3. CPU: (8) arm64 Apple M1
  4. Memory: 175.06 MB / 16.00 GB
  5. Shell:
  6. version: "5.9"
  7. path: /bin/zsh
  8. Binaries:
  9. Node:
  10. version: 18.18.0
  11. path: ~/.nvm/versions/node/v18.18.0/bin/node
  12. Yarn:
  13. version: 3.6.4
  14. path: /opt/homebrew/bin/yarn
  15. npm:
  16. version: 9.8.1
  17. path: ~/.nvm/versions/node/v18.18.0/bin/npm
  18. Watchman:
  19. version: 2024.04.15.00
  20. path: /opt/homebrew/bin/watchman
  21. Managers:
  22. CocoaPods:
  23. version: 1.15.2
  24. path: /Users/gary/.rvm/gems/ruby-2.7.5/bin/pod
  25. SDKs:
  26. iOS SDK:
  27. Platforms:
  28. - DriverKit 23.5
  29. - iOS 17.5
  30. - macOS 14.5
  31. - tvOS 17.5
  32. - visionOS 1.2
  33. - watchOS 10.5
  34. Android SDK:
  35. API Levels:
  36. - "29"
  37. - "30"
  38. - "31"
  39. - "32"
  40. - "33"
  41. - "34"
  42. Build Tools:
  43. - 28.0.3
  44. - 30.0.2
  45. - 30.0.3
  46. - 31.0.0
  47. - 32.0.0
  48. - 32.1.0
  49. - 33.0.0
  50. - 33.0.1
  51. - 34.0.0
  52. System Images:
  53. - android-32 | Google APIs ARM 64 v8a
  54. - android-32 | Google Play ARM 64 v8a
  55. - android-33 | Google APIs ARM 64 v8a
  56. - android-33 | Google Play ARM 64 v8a
  57. - android-Tiramisu | Google APIs ARM 64 v8a
  58. Android NDK: 22.1.7171670
  59. IDEs:
  60. Android Studio: 2023.2 AI-232.10300.40.2321.11668458
  61. Xcode:
  62. version: 15.4/15F31d
  63. path: /usr/bin/xcodebuild
  64. Languages:
  65. Java:
  66. version: 17.0.12
  67. path: /usr/bin/javac
  68. Ruby:
  69. version: 2.7.5
  70. path: /Users/gary/.rvm/rubies/ruby-2.7.5/bin/ruby
  71. npmPackages:
  72. "@react-native-community/cli": Not Found
  73. react:
  74. installed: 18.3.1
  75. wanted: 18.3.1
  76. react-native:
  77. installed: 0.75.2
  78. wanted: 0.75.2
  79. react-native-macos: Not Found
  80. npmGlobalPackages:
  81. "*react-native*": Not Found
  82. Android:
  83. hermesEnabled: true
  84. newArchEnabled: true
  85. iOS:
  86. hermesEnabled: true
  87. newArchEnabled: true

堆栈跟踪或日志

  1. n/a

可复现问题

https://github.com/candlefinance/oss/tree/feat-convert-send-na

截图和视频

  • 无响应*
8ulbf1ek

8ulbf1ek1#

⚠️React Native的新版本可用!
i️您正在使用受支持的次要版本,但似乎有一个更新的补丁可用 - 0.74.5。请升级到您次要版本的最高补丁或最新版本,并验证问题是否仍然存在(或者,创建一个新项目并在其中重现问题)。如果无法重现,请告知我们,以便我们关闭此问题。这有助于确保我们关注仍在最近版本中存在的问题。
13z8s7eq

13z8s7eq2#

⚠️缺失可复现示例
i️我们无法在您的问题报告中检测到可复现的示例。请提供以下内容:* 如果您的错误与UI相关:一个 Snack* 如果您的错误与构建/更新相关:使用我们的 Reproducer Template 。需要在您用户名下的GitHub仓库中有一个复现器。
bxjv4tth

bxjv4tth3#

⚠️React Native的新版本可用!
i️您正在使用受支持的次要版本,但似乎有一个更新的补丁可用 - undefined。请访问您次要版本的最高补丁或最新版本并验证问题是否仍然存在(或者,创建一个新项目并在其中重现问题)。如果无法重现,请告知我们,以便我们关闭此问题。这有助于确保我们关注仍在最近版本中存在的问题。
ibrsph3r

ibrsph3r4#

⚠️缺失可复现示例
i️我们无法在您的问题报告中检测到可复现的示例。请提供以下内容:* 如果您的错误与UI相关:一个 Snack* 如果您的错误与构建/更新相关:使用我们的 Reproducer Template
fnx2tebb

fnx2tebb5#

@gtokman 看到你添加了标签,你有权限删除上面的评论吗?几乎肯定是恶意软件。

aiazj4mn

aiazj4mn6#

感谢gtokman提出的问题。以下是几点:

  1. Swift尚未得到新架构的官方支持。我知道这是一个很大的缺失,但目前我们没有资源去处理这个问题。我希望这能尽快实现。

  2. Swift和C++的配合并不理想。是的,我们有Swift/Cxx互操作性,但遗憾的是它并不完整,而且我认为它还不够稳定,无法使用。

1.看起来你的pod在一些尝试导入<memory> C模块的swift文件之前失败了。这也可能发生在传递依赖关系中。Swift无法导入C模块,因此出现了失败。

cld4siwp

cld4siwp7#

感谢cipolleschi提供的上下文。
1.看起来你的pod在尝试导入<memory> C模块之前就失败了。这也可能发生在传递依赖关系中。Swift无法导入C模块,因此导致失败。
我提到我找到了一个解决方法。我的猜想是构建设置没有正确设置,导致如果我包含Swift source_files时pod编译失败。你有什么想法吗?我想尝试比较生成的.xcodeproj.与手动添加文件的不同之处。

odopli94

odopli948#

当你手动添加Swift文件时,Xcode通常会创建一些桥接头文件和额外的配置文件。我们需要查看生成的内容,以了解Xcode如何解决这个问题,然后将这些文件"提交"到库中。如果我能找到时间去研究一下,但这可能需要几周的时间,因为下周我们有React Universe,而我将在波兰参加会议。

mctunoxg

mctunoxg9#

当你手动添加Swift文件时,Xcode通常会创建一些桥接头文件和额外的配置文件。我们需要查看生成的内容,以了解Xcode如何解决这个问题,然后将这些文件“提交”到库中。

如果有时间的话,我会花些时间去研究一下,但很可能在几周内就会发生,因为下周我们有React Universe会议,我将前往波兰参加。

感谢@cipolleschi!

我在Xcode中看到了桥接头文件的警告,但我没有创建它。桥接头文件用于Obj-C到Swift的转换。要使用Swift到Obj-C,你只需要导入生成的Swift头文件,例如Send.swift -> #import "candlefinance_send-Swift.h"

相关问题