我正在尝试使用Swift编译器和-print-ast标志,从Swift文件打印抽象语法树(AST)。这是在没有Xcode和xcodebuild的情况下进行的。此处有详细信息。
我卡在了处理通过Carthage构建的第三方框架的导入上。给定以下代码的源文件:
命令执行失败:
我卡在了处理通过Carthage构建的第三方框架的导入上。给定以下代码的源文件:
import Foundation
import BrightFutures // 3rd party framework
class MyAsyncService {
func asyncFunc() -> Future<String, NSError> {
return Promise<String, NSError>().future
}
}
编译MacOS的工作正常
通过指定框架搜索路径(-F
),使用以下命令:
swiftc -print-ast Source.swift -F Carthage/Build/Mac
产生预期的输出结果:
import Foundation
import BrightFutures
internal class MyAsyncService {
internal func asyncFunc() -> Future<String, NSError>
@objc deinit
internal init()
}
编译 iOS 应用?
我需要为一个仅针对 iOS 平台的项目打印 AST,并且需要包含为 iOS 构建的依赖项。
当我尝试指向为 iOS 构建的框架时:
swiftc -print-ast Source.swift -F Carthage/Build/iOS
命令执行失败:
Source.swift:2:12: error: module file was created for incompatible target x86_64-apple-ios8.0: [...]/Carthage/Build/iOS/BrightFutures.framework/Modules/BrightFutures.swiftmodule/x86_64.swiftmodule
import BrightFutures // 3rd party framework
^
import Foundation
import BrightFutures
internal class MyAsyncService {
internal func asyncFunc() -> <<error type>>
@objc deinit
internal init()
}
我还尝试了添加-sdk
标志:
-sdk $(xcrun --sdk iphoneos --show-sdk-path)
以指定iphoneos SDK,但这会产生一个关于不支持的架构的错误。
如何才能使它成功构建?