SwiftUI中如何获取Xcode版本与构建号并嵌入反馈邮件
获取SwiftUI应用的版本号与构建号并嵌入邮件正文
嘿,这个问题我之前也碰到过,其实从Xcode配置的版本信息里读取数据非常简单,直接通过Bundle就能搞定!下面是具体的解决步骤:
1. 编写获取版本与构建号的计算属性
在你的View结构体里添加一个私有计算属性,用来拼接版本号和构建号:
private var appVersionBuild: String { // 读取版本号(对应Xcode里的「Version」) let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown Version" // 读取构建号(对应Xcode里的「Build」) let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown Build" // 拼接成「版本号(构建号)」的友好格式 return "\(version) (\(build))" }
这里做了容错处理,如果意外获取不到信息,会显示Unknown Version (Unknown Build),避免出现崩溃或空白内容。
2. 修改邮件按钮代码,嵌入版本信息
接下来调整你原有的按钮逻辑,重点是对邮件正文进行URL编码(避免换行、空格等字符破坏链接结构),然后把版本信息嵌入进去:
Button(action: { // 获取拼接好的版本信息 let versionInfo = appVersionBuild // 用多行字符串构建原始邮件正文,可读性更强 let rawBody = """ Hallo, i will tell you something about this app: Version: \(versionInfo) """ // 对正文进行URL编码,确保特殊字符被正确转义 guard let encodedBody = rawBody.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), let mailURL = URL(string: "mailto:mail@mymailadress.com?subject=MyApp%20Feedback&body=\(encodedBody)") else { return } // 打开系统邮件应用 UIApplication.shared.open(mailURL, 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) }
小提示
- 如果你需要单独使用版本号或构建号,可以把计算属性拆分成两个独立的属性,比如
appVersion和appBuild。 - 这种方法兼容所有iOS版本,不需要依赖系统新API,稳定性拉满。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

