描述
我正在升级我们其中一个使用Swift编写逻辑的开源库。然而,当我在podspec source_files
中包含swift
时,我遇到了编译器错误。
重现步骤
我在更新模块的podspec以在ios/
目录中包含.swift
文件后遇到了编译器错误。
s.source_files = "ios/**/*.{h,m,mm,cpp,swift}" <--- adding Swift
构建开发pod后,我得到了这个错误:
我找到了一个解决方法,即省略以下内容:
1.
s.source_files = "ios/**/*.{h,m,mm,cpp}" <--- remove swift
run bundle exec pod install
1.手动添加.swift
文件
构建项目后,没有编译器错误。这对于测试来说很好,但我需要更新podspec以将文件包含在Compile Sources
中,否则,还会出现其他错误。
React Native版本
0.74.0
受影响的平台
运行时-iOS
领域
TurboModule - 新的本地模块系统
npx react-native info
的输出
System:
OS: macOS 14.4.1
CPU: (8) arm64 Apple M1
Memory: 175.06 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 18.18.0
path: ~/.nvm/versions/node/v18.18.0/bin/node
Yarn:
version: 3.6.4
path: /opt/homebrew/bin/yarn
npm:
version: 9.8.1
path: ~/.nvm/versions/node/v18.18.0/bin/npm
Watchman:
version: 2024.04.15.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.15.2
path: /Users/gary/.rvm/gems/ruby-2.7.5/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 23.5
- iOS 17.5
- macOS 14.5
- tvOS 17.5
- visionOS 1.2
- watchOS 10.5
Android SDK:
API Levels:
- "29"
- "30"
- "31"
- "32"
- "33"
- "34"
Build Tools:
- 28.0.3
- 30.0.2
- 30.0.3
- 31.0.0
- 32.0.0
- 32.1.0
- 33.0.0
- 33.0.1
- 34.0.0
System Images:
- android-32 | Google APIs ARM 64 v8a
- android-32 | Google Play ARM 64 v8a
- android-33 | Google APIs ARM 64 v8a
- android-33 | Google Play ARM 64 v8a
- android-Tiramisu | Google APIs ARM 64 v8a
Android NDK: 22.1.7171670
IDEs:
Android Studio: 2023.2 AI-232.10300.40.2321.11668458
Xcode:
version: 15.4/15F31d
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.12
path: /usr/bin/javac
Ruby:
version: 2.7.5
path: /Users/gary/.rvm/rubies/ruby-2.7.5/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.3.1
wanted: 18.3.1
react-native:
installed: 0.75.2
wanted: 0.75.2
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true
堆栈跟踪或日志
n/a
可复现问题
https://github.com/candlefinance/oss/tree/feat-convert-send-na
截图和视频
- 无响应*
9条答案
按热度按时间8ulbf1ek1#
13z8s7eq2#
bxjv4tth3#
ibrsph3r4#
fnx2tebb5#
@gtokman 看到你添加了标签,你有权限删除上面的评论吗?几乎肯定是恶意软件。
aiazj4mn6#
感谢gtokman提出的问题。以下是几点:
Swift尚未得到新架构的官方支持。我知道这是一个很大的缺失,但目前我们没有资源去处理这个问题。我希望这能尽快实现。
Swift和C++的配合并不理想。是的,我们有Swift/Cxx互操作性,但遗憾的是它并不完整,而且我认为它还不够稳定,无法使用。
1.看起来你的pod在一些尝试导入
<memory>
C模块的swift文件之前失败了。这也可能发生在传递依赖关系中。Swift无法导入C模块,因此出现了失败。cld4siwp7#
感谢cipolleschi提供的上下文。
1.看起来你的pod在尝试导入
<memory>
C模块之前就失败了。这也可能发生在传递依赖关系中。Swift无法导入C模块,因此导致失败。我提到我找到了一个解决方法。我的猜想是构建设置没有正确设置,导致如果我包含Swift
source_files
时pod编译失败。你有什么想法吗?我想尝试比较生成的.xcodeproj.
与手动添加文件的不同之处。odopli948#
当你手动添加Swift文件时,Xcode通常会创建一些桥接头文件和额外的配置文件。我们需要查看生成的内容,以了解Xcode如何解决这个问题,然后将这些文件"提交"到库中。如果我能找到时间去研究一下,但这可能需要几周的时间,因为下周我们有React Universe,而我将在波兰参加会议。
mctunoxg9#
当你手动添加Swift文件时,Xcode通常会创建一些桥接头文件和额外的配置文件。我们需要查看生成的内容,以了解Xcode如何解决这个问题,然后将这些文件“提交”到库中。
如果有时间的话,我会花些时间去研究一下,但很可能在几周内就会发生,因为下周我们有React Universe会议,我将前往波兰参加。
感谢@cipolleschi!
我在Xcode中看到了桥接头文件的警告,但我没有创建它。桥接头文件用于Obj-C到Swift的转换。要使用Swift到Obj-C,你只需要导入生成的Swift头文件,例如
Send.swift -> #import "candlefinance_send-Swift.h"
。