Xcode 从编译后的代码中找到Swift中的源项目目录
我想在我自己的swift项目中找到我未编译的源代码的目录(因为我想计算它的行数)Xcode 从编译后的代码中找到Swift中的源项目目录,xcode,swift,Xcode,Swift,我想在我自己的swift项目中找到我未编译的源代码的目录(因为我想计算它的行数) let projectRepo = "/Users/tombrown/Workspace/SwiftGolf" // <-- I want this programmatically let path = "\(projectRepo)/SwiftGolf/Golf.swift" var fileContents = String.stringWithContentsOfFile(path, encodin
let projectRepo = "/Users/tombrown/Workspace/SwiftGolf" // <-- I want this programmatically
let path = "\(projectRepo)/SwiftGolf/Golf.swift"
var fileContents = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil)
let projectRepo=“/Users/tombrown/Workspace/SwiftGolf”//由于将源文件添加到构建阶段>复制捆绑资源
不起作用,为了获得更大的灵活性,我建议使用一点Objective-C
在项目的生成设置中添加以下行:
然后,如果您的项目已经有一个桥接头,const将从Swift自动变为可用
do {
let path = "\(PROJECT_DIR)/Test/ViewController.swift"
let source = try String(contentsOfFile: path)
print(source)
} catch {
print("Error handling goes here")
}
如果项目没有桥接头,那么可以通过向项目中添加新的Objective-C类来让Xcode添加桥接头,然后Xcode将询问桥接头
编辑:
当然,也可以手动添加桥接头,方法是向项目添加一个新的头文件,然后在项目的构建设置中设置其到“Objective-C桥接头”的路径
通常情况下,项目_DIR宏不会自动用于Swift代码,在桥接标头中添加:
@import Foundation;
static const NSString *kProjectDir = PROJECT_DIR;
结束编辑
如果您对文件的只读访问没有问题,您可以使用Xcode将源文件复制到应用程序的资源文件夹中,方法是在图像上添加自定义脚本或copy files
Build阶段:
那么文件的路径将是:
let path = NSBundle.mainBundle().pathForResource("ViewController", ofType: "swift")
挑战在于快速推断运行时与编译时的位置。xcode建议中的参数运行良好,可以作为解决方案。我不能使用这种方法,因为我使用的是没有xcode的SPM。另一种方法是使用这个库
在你的包裹里。斯威夫特
dependencies: [
.Package(url: "https://github.com/JohnSundell/Files.git", Version(1,8,0))
]
然后在代码中
import Files
let projectRepo = "\(Folder.home.path)/gitWorkspace/SwiftGolf"
do {
let model = try Data(contentsOf:URL(fileURLWithPath: "\(projectDir)/\(modelFile)"))
}catch {
print("error: \(error)")
}
另一个选项是CommandLineKit/xcode参数
import CommandLineKit .
let cmdLine = CommandLineKit.CommandLine() .
let file = StringOption(shortFlag: "f",
longFlag: "file",
required: true,
helpMessage: "The file you're trying to parse") .
cmdLine.addOptions(file)
do {
try cmdLine.parse()
print(file.value!)
} catch {
print("error: \(error)")
exit(-1)
}
我无法访问预处理器宏,即使使用桥接头@WiseNoEdit's true,有时常量在Swift代码中也无法自动使用。然后它可以显式地映射到桥接头中,如:static const NSString*kProjectDir=PROJECT\u DIR代码>