Ric*_*zio 6 swift swift-package-manager xcode-cloud swift-package-plugin
我有这个插件
struct Main: BuildToolPlugin {
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
let inputFolder = target.directory.appending("Image")
let output = context.pluginWorkDirectory.appending("GeneratedImageAssets.swift")
return [
.buildCommand(
displayName: "Running ImageAssets parser",
executable: try context.tool(named: "ImageAssetsParser").path,
arguments: [inputFolder.string, output.string],
environment: [:],
inputFiles: [inputFolder],
outputFiles: [output]
)
]
}
}
Run Code Online (Sandbox Code Playgroud)
ImageAssetsParser是一个executableTarget快速代码,用于扫描文件夹并将它们写入output插件发送的文件夹中。
虽然在本地它可以正常工作,但在 Xcode Cloud 上我收到权限错误:
奇怪的是,我还有一个prebuildCommand插件,它使用swiftgen, 作为 anartifactbundle并且它工作正常,它写在同一个文件夹中。
我错过了什么吗?
几个月后,偶然我发现了问题所在!
在我的插件实现中,我通过写入文件
"""
// auto generated swift file
// ... the content
""".write(to: output, atomically: true, encoding: .utf8)
Run Code Online (Sandbox Code Playgroud)
使用atomically: true是问题所在:这意味着 swift 将整个内容写入放置在其他地方的临时文件中,而 Xcode Cloud 此时没有权限!
使用atomically: false该文件直接写入我们的输出文件,这是context.pluginWorkDirectory.appending("GeneratedImageAssets.swift")这里授予的权限!
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |