Version (CFBundleShortVersionString) และ Build Number (CFBundleVersion) เก็บอยู่ใน Info.plist เข้าถึงได้ผ่าน Bundle.main
โค้ดดึงค่า
// Version (เช่น 1.2.3)
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "Unknown"
// Build Number (เช่น 42)
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String ?? "Unknown"
print("Version: \(version), Build: \(build)")
// Output: Version: 1.2.3, Build: 42
Extension ใช้งานง่าย
extension Bundle {
var appVersion: String {
return object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "1.0"
}
var buildNumber: String {
return object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String ?? "1"
}
var fullVersion: String {
return "\(appVersion) (\(buildNumber))"
}
}
// ใช้งาน
let version = Bundle.main.appVersion // "1.2.3"
let build = Bundle.main.buildNumber // "42"
let full = Bundle.main.fullVersion // "1.2.3 (42)"
การใช้งานจริง
- แสดงใน Settings/About Screen
- ส่งพร้อม API Request (Header:
X-App-Version) - Crash Reporting (Crashlytics, Sentry)
- Feature Flag ตาม Version
- Force Update Logic
// ตัวอย่าง Force Update
func checkForceUpdate() {
let currentVersion = Bundle.main.appVersion
// เรียก API เช็ค Minimum Version จาก Server
// หาก current < minimum → แสดง Force Update Alert
}
Auto Increment Build Number
ใน Xcode: Target → Build Settings → Versioning System = Apple Generic → ใช้ Script ใน Build Phases:
# Run Script Phase
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
หรือใช้ fastlane action increment_build_number