Evi*_*ang 6 xcode swift-package-manager
我正在集成WireGuardKit,根据其自述文件,我需要创建一个外部构建系统目标来构建wireguard-go-bridge 库。
在外部构建系统目标的信息选项卡中。文档说我应该使用这个位置:${BUILD_DIR%Build/*}SourcePackages/checkouts/wireguard-apple/Sources/WireGuardKitGo
外部构建系统目标的构建失败。由于路径无法解析。如果我使用正确的绝对路径更改路径,则构建将会成功。
谁能告诉我这是什么意思${BUILD_DIR%Build/*},看起来firebase也在使用这个神奇的变量,请参阅Firebase Crashlytics | Swift 包管理器 (SPM) 运行脚本?
经过一番谷歌搜索后,我找到了答案:\n引用超级用户贡献者 Marek Rost 的帖子:
\n\n\n当模式 ${variable%substring} 中使用百分号 (%) 时,它将返回变量的内容,并从变量后面删除出现最短的子字符串。
\n
\n\n此函数支持通配符模式,这就是为什么它接受星号(星号)作为零个或多个字符的替代。应该提到的是,这是 Bash 特有的。其他Linux shell 不一定包含此功能。
\n
\n\n如果您想了解有关 Bash 中字符串操作的更多信息,那么我强烈建议您阅读以下页面:高级 Bash 脚本指南:第 10 章:操作变量。例如,在许多其他方便的功能中,它解释了双百分号 (%%) 的作用。
\n
\n\n我忘了提及,当它用于模式 $((variable%number)) 或 $((variable1%$variable2)) 时,百分号 (%) 字符将用作模运算符。
\n
\n\n当百分号 (%) 在不同的上下文中使用时,它应该仅被识别为常规字符。
\n
所以假设 ${BUILD_DIR} 是
\n~/Library/Developer/Xcode/DerivedData/wgShowcase-dejirdnsktlwtagdrhljeefdnxvi/Build/Products\nRun Code Online (Sandbox Code Playgroud)\n${BUILD_DIR%Build/*} 的意思是Build/*从 ${BUILD_DIR} 变量后面删除最短出现的子字符串(星号是通配符)。在这种情况下,Build/Products将被删除。然后我们得到结果:
~/Library/Developer/Xcode/DerivedData/wgShowcase-dejirdnsktlwtagdrhljeefdnxvi/\nRun Code Online (Sandbox Code Playgroud)\n因此,由于该项目使用的所有 SPM 包都在子目录中签出~/Library/Developer/Xcode/DerivedData/wgShowcase-dejirdnsktlwtagdrhljeefdnxvi/,因此最终解析的路径应该是:
~/Library/Developer/Xcode/DerivedData/wgShowcase-dejirdnsktlwtagdrhljeefdnxvi/SourcePackages/checkouts/wireguard-apple/Sources/WireGuardKitGo\nRun Code Online (Sandbox Code Playgroud)\n至于为什么构建不成功,我认为是Xcode的bug。我已向苹果报告了一个错误。对于任何尝试构建的人。\n使用以下作为解决方法:
\n${BUILD_DIR}/../../SourcePackages/checkouts/wireguard-apple/Sources/WireGuardKitGo\nRun Code Online (Sandbox Code Playgroud)\n更新:这是苹果公司对此“问题”的回应
\n\n\n在查看您的反馈后,我们为您提供了一些额外的信息,或者针对此问题需要采取一些额外的信息:
\n
\n\n这里的 Directory 字段不被评估为 bash 变量,它\xe2\x80\x99s 被评估为 Xcode 构建设置,它不支持 % 等 bash 运算符。
\n
\n\n您可能需要使用 makefile 将工作目录设置为已知目录,然后让该 makefile 使用最终目标目录中的 makefile。
\n
\n\n我们注意到,当我们克隆存储库时,它附带了 macOS 和 iOS 目标,其目录设置为 $(PROJECT_DIR)/Sources/WireGuardKitGo,因此我们想知道项目所有者是否已更新项目来解决此问题,但还没有\ xe2\x80\x99t 更新了文档。
\n
\n\n无论如何,这是正确的行为。
\n
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |