gpt4 book ai didi

xcode - 如何检查是否需要接受 Xcode 许可

转载 作者:行者123 更新时间:2023-12-02 19:49:05 27 4
gpt4 key购买 nike

在 MacOS Catalina 上升级到 Xcode 11.1 后,运行一些命令(例如 git status)会导致 Xcode 声明必须同意许可。显然,我们可以运行 git statusgrep 以获得一些输出,但这似乎不是最佳选择。

是否有编程方式(例如使用 xcodebuild)来检查是否需要接受 Xcode 许可证?

最佳答案

评估同意的许可

运行

defaults read /Library/Preferences/com.apple.dt.Xcode

应该给出类似的东西:

{
IDELastGMLicenseAgreedTo = EA1647;
IDEXcodeVersionForAgreedToGMLicense = "11.3.1";
}

这也可以通过编程方式进行评估。

有几种方法可以做到这一点,一种是使用 shell 脚本,例如,您可以将其命名为 XcodeLicenseAccepted.sh,如果当前安装的 Xcode 版本的许可证已被接受,它将返回 0。

Xcode 版本

要获取当前安装的Xcode的版本号,可以看一下输出:

xcodebuild -version 

应该看起来像这样:

Xcode 11.3.1
Build version 11C505

XcodeLicenseAccepted.sh

#!/bin/sh
XCODE_VERSION=`xcodebuild -version | grep '^Xcode\s' | sed -E 's/^Xcode[[:space:]]+([0-9\.]+)/\1/'`
ACCEPTED_LICENSE_VERSION=`defaults read /Library/Preferences/com.apple.dt.Xcode 2> /dev/null | grep IDEXcodeVersionForAgreedToGMLicense | cut -d '"' -f 2`

if [ "$XCODE_VERSION" = "$ACCEPTED_LICENSE_VERSION" ]
then
exit 0 #success
else
exit 1
fi

Swift 程序

另一种可能的解决方案是改用一个小的 Swift 程序,例如:

import Foundation

private var acceptedXcodeVersion: String {
var acceptedXcodeVersion = ""
let licensePlistPath = "/Library/Preferences/com.apple.dt.Xcode.plist"
if FileManager.default.fileExists(atPath: licensePlistPath) {
if let licenseInfo = NSDictionary(contentsOfFile: licensePlistPath) {
if let version = licenseInfo["IDEXcodeVersionForAgreedToGMLicense"] as? String {
acceptedXcodeVersion = version
}
}
}
return acceptedXcodeVersion
}

private var installedXcodeVersion: String {
let process = Process()
process.launchPath = "/bin/sh"
process.arguments = ["-c", "xcodebuild -version"]

let stdoutPipe = Pipe()
process.standardOutput = stdoutPipe
process.launch()

var version = ""
let output = stdoutPipe.fileHandleForReading.readDataToEndOfFile()
if let versionInfo = String(data: output, encoding: .utf8) {
let lines = versionInfo.split { $0.isNewline }
for line in lines {
let parts = line.split { $0 == " " }
if parts.count > 1 && parts[0] == "Xcode" {
version = String(parts[1])
}
}
}

process.waitUntilExit()
return version
}

exit(acceptedXcodeVersion == installedXcodeVersion ? 0 : 1)

测试

要演示 XcodeLicenseAccepted.sh 的功能,还可以使用一个简短的 shell 脚本:

#!/bin/sh

./XcodeLicenseAccepted.sh
if [ $? -eq 0 ]
then
echo "xcode license already accepted"
else
echo "xcode license still needs to be accepted"
fi

用 Swift 程序替换对 XcodeLicenseAccepted.sh 的调用以测试替代解决方案。

最后是接受 Xcode 许可前后结果的截图:

demo output

关于xcode - 如何检查是否需要接受 Xcode 许可,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58632629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com