如何从 SwiftUI 中的 General/Targets 读取 Xcode 中的版本和构建

Posted

技术标签:

【中文标题】如何从 SwiftUI 中的 General/Targets 读取 Xcode 中的版本和构建【英文标题】:How to read Version & Build in Xcode from General/Targets in SwiftUI 【发布时间】:2020-08-01 19:16:32 【问题描述】:

在我的第一个应用程序(我用 SwiftUI 编写)中,我想添加一个按钮来向我发送邮件以获取反馈、错误、... 该按钮完美无缺,但我想在此邮件中添加我的应用程序的当前版本和构建。它显示在General/Targets/Identity。但我找不到这样做的方法。

Button(action: 
    if let url = URL(string: "mailto:mail@mymailadress.com?subject=MyApp%20Feedback&body=Hallo,%3Cbr%3Ei%20will%20tell%20you%20something%20about%20this%20app:%3Cbr%3E%3Cbr%3EVersion:%20\(AppVersionBuild)")
        UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
     
) 
    HStack
        Image(systemName: "envelope")
        Text("send a mail to mail@mymailadress.com")
    
    .padding(10)
    .foregroundColor(.white)
    .background(LinearGradient(gradient: Gradient(colors: [Color("GradientStart"), Color("GradientEnd")]), startPoint: .topLeading, endPoint: .bottomTrailing))
    .cornerRadius(10, antialiased: false)
    .shadow(radius: 10)

知道如何将版本放入邮件正文(变量,例如AppVersionBuild)吗?

谢谢

【问题讨论】:

【参考方案1】:

您可以创建一个返回版本和内部版本号的函数

func versionAndBuildNumber() -> String 
    let versionNumber = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
    let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
    if let versionNumber = versionNumber, let buildNumber = buildNumber 
        return "\(versionNumber) (\(buildNumber))"
     else if let versionNumber = versionNumber 
        return versionNumber
     else if let buildNumber = buildNumber 
        return buildNumber
     else 
        return ""
    

并将\(AppVersionBuild) 替换为以下\(versionAndBuildNumber())

【讨论】:

以上是关于如何从 SwiftUI 中的 General/Targets 读取 Xcode 中的版本和构建的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SwiftUI 中的图库中选择图像

如何从 SwiftUI 中的 NavigationView 中删除搜索栏?

SwiftUI:如何从核心数据中的 TextField 中保存值

如何从 Mac OS 中的 SwiftUI 列表中删除底部/顶部项目填充

如何从 SwiftUI 中的结构返回值?

如何从 SwiftUI 中的 Bundle 中的有效路径或 URL 将图像加载到 Image()?