อ่านเวอร์ชันจาก Info.plist


คำตอบ:


202

คุณสามารถอ่าน Info.plist ของคุณเป็นพจนานุกรมด้วย

[[NSBundle mainBundle] infoDictionary]

และคุณสามารถรับเวอร์ชันได้อย่างง่ายดายCFBundleVersionด้วยวิธีนี้

สุดท้ายคุณจะได้รับเวอร์ชันด้วย

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];

สมบูรณ์แบบ. มันง่ายกว่าทุกบรรทัดของฟังก์ชัน CF * ที่ฉันใช้ ... ฉันแน่ใจว่าจะต้องมีวิธีที่รวดเร็วในการรับ NSDictionary
สตูว์

16
สำหรับหมายเลขเวอร์ชันสิ่งนี้ไม่สำคัญ แต่สำหรับคีย์อื่น ๆ ที่คุณอาจต้องการใช้objectForInfoDictionaryKey:แทนเนื่องจากจะส่งคืนค่าที่แปลแล้วหากมี:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony

20
หมายเหตุใน Xcode4 หากคุณดูที่แผงสรุปของเป้าหมายคุณจะเห็นฟิลด์เวอร์ชัน & สร้าง CFBundleVersionได้รับการ repurposed CFBundleShortVersionStringที่จะสร้างและเวอร์ชันคือ
memmons

5
สิ่งนี้จะดึงทั้งเวอร์ชันและหมายเลขบิวด์และจัดรูปแบบเข้าด้วยกัน: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks

ใช้ CFBundleShortVersionString เป็นคีย์สำหรับเมธอด objectForKey
ayalcinkaya

11

สำหรับผู้ใช้ Swift:

if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
    print("version is : \(version)")
}

สำหรับผู้ใช้ Swift3:

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
    print("version is : \(version)")
}

5

ฉันรู้ว่าเวลาผ่านไปสักพักหนึ่งตั้งแต่การแสวงหาและคำตอบ

เนื่องจาก iOS8 คำตอบที่ยอมรับอาจไม่ทำงาน

นี่เป็นวิธีใหม่ในการดำเนินการทันที:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);

6
คุณมีลิงค์ว่าทำไมจึงเป็นเช่นนั้น?
Ian Warburton

4

ตอนนี้ใน iOS 8 จำเป็นต้องใช้ทั้งสองฟิลด์ ก่อนหน้านี้ใช้งานได้โดยไม่มีไฟล์CFBundleShortVersionString. แต่ตอนนี้เป็นช่องที่จำเป็นในการส่งแอพใด ๆ ในแอพสโตร์ และkCFBundleVersionKeyมีการเปรียบเทียบสำหรับการอัปโหลดบิวด์ใหม่ทุกรายการซึ่งจะต้องเป็นลำดับที่เพิ่มขึ้น พิเศษสำหรับรุ่น TestFlight ฉันทำแบบนี้

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }

ขอบคุณ .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; ทำงานให้ฉัน
swiftBoy

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.