2012-04-04 29 views
34

Thật dễ dàng để đặt số phiên bản và phiên bản theo cách thủ công trong Xcode và tôi đã học cách tăng số bằng phiên bản macro tại thời điểm xây dựng. Nhưng làm thế nào để tôi tham khảo các giá trị của họ trong mã?Tham khảo số hoặc số phiên bản trong mã

+0

bạn có một tài liệu tham khảo/link về cách autocreate # s phiên bản? – phlebotinum

+0

@robo thấy "trả lời" của tôi bên dưới. – RobertL

Trả lời

67

Chắc chắn, bạn có thể yêu cầu bó chính của bạn cho thư mục thông tin trong đó bao gồm tất cả các phím và các giá trị của info.plist của bạn, bao gồm số phiên bản:

NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; 
NSString *version = [info objectForKey:@"CFBundleShortVersionString"]; 
+1

Wow 5 câu trả lời hay trong vòng 12 phút sau khi đăng câu hỏi! Tất cả đều xứng đáng với một kiểm tra màu xanh lá cây nhưng tôi chỉ có thể chấp nhận một vì vậy tôi đang dùng một với dấu thời gian sớm nhất. – RobertL

+0

@RobertL Trong trường hợp này, bạn có thể upvote câu trả lời của họ để cung cấp cho họ một số danh tiếng. – JustSid

+0

Thực hiện điều đó. Tôi không biết tôi có thể làm điều đó cho đến bây giờ. Cảm ơn. – RobertL

3

Bạn có thể nhận các giá trị info.plist với mảnh này mã (thay thế CFBundleShortVersionString với chìa khóa của info.plist bạn muốn cf. Recommended Info.plist Keys)

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] 
77
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; 
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0 
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 
+0

Tài liệu này có ở bất kỳ đâu trong tài liệu của Apple không? Cảm ơn! – snowbound

+0

https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html ghi lại các khóa có thể nằm trong Info.plist của một ứng dụng (tốt, bất kỳ gói nào), bao gồm các hai. –

10
NSBundle *bundle = [NSBundle mainBundle]; 
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"]; 
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 
3

Kể từ những giá trị được lưu trữ trong của Info.plist ứng dụng của bạn, bạn có thể đọc sau đó thông qua các phương pháp được cung cấp trên NSBundle:

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString]; 

Xem Accessing bundles contents như tài liệu tham khảo có thẩm quyền về việc dữ liệu từ file Info.plist của bạn và Core Foundation keys cho sẵn Info.plist phím.

13

@robo Tôi đã làm theo cách viết lên cách tự động tăng số bản dựng (không phải số phiên bản, nhưng điều này rất giống) nhưng giờ tôi không thể tìm thấy. Tôi sẽ cố gắng giải thích những gì tôi đã làm. Tôi hy vọng nó đủ rõ ràng để làm theo.

Trong Xcode 4, hãy tìm trong ngăn dẫn hướng, là ngăn ở bên trái màn hình Xcode. Nó có 7 biểu tượng trên đầu trang. Chọn biểu tượng ngoài cùng bên trái (trông giống như một thư mục tệp) để có được ngăn dẫn hướng dự án.

Bây giờ hãy nhấp vào mục đầu tiên trong ngăn đó, chính là dự án. Điều đó mở ra một cửa sổ lớn ở trung tâm với một cột hẹp ở bên trái của nó.

Cột hẹp có 2 phần: "DỰ ÁN" VÀ "MỤC TIÊU". Nhấp vào tên dự án của bạn trong phần "MỤC TIÊU". Bây giờ ô trung tâm có 5 tab dọc theo đầu trang: "Tóm tắt", "Thông tin", "Cài đặt xây dựng", "Giai đoạn xây dựng" và "Xây dựng quy tắc".

Nhấp vào tab "Tạo giai đoạn". Nếu cấu hình của bạn giống như của tôi, bây giờ bạn sẽ thấy 4 phần trong cửa sổ chính: "Phụ thuộc mục tiêu", "Sao chép tài nguyên gói", "Biên dịch nguồn" và "Liên kết ...". Nhấp vào "Thêm giai đoạn xây dựng" (ở góc dưới bên phải) và chọn "Thêm chạy tập lệnh". Một phần thứ 5 bây giờ xuất hiện trong ngăn giữa với tiêu đề "Run Script". Kéo phần "Chạy tập lệnh" lên để nó là phần thứ 2 từ trên cùng, ngay bên dưới "Phụ thuộc mục tiêu".

Bây giờ hãy nhấp vào hình tam giác tiết lộ cho phần Chạy tập lệnh. Điều đó mở ra một cửa sổ nơi bạn có thể đặt một kịch bản. Sao chép và dán tập lệnh sau vào cửa sổ đó.

#!/bin/bash  
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
bN=$((0x$bN)) 
bN=$(($bN + 1)) 
bN=$(printf "%X" $bN) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE" 

Đảm bảo rằng "Chỉ chạy tập lệnh khi cài đặt" không được kiểm tra.

Vậy đó! Giờ đây, số tự động tạo của bạn được xây dựng mỗi khi bạn xây dựng dự án của mình.

Tập lệnh này giả sử bạn có số bản dựng hex đơn giản trong tệp info.plist và tăng nó dưới dạng hex. Tôi không chắc chắn nó sẽ làm gì nếu thiếu số bản dựng.Nhưng thật dễ dàng để nhập giá trị bắt đầu - chỉ cần chuyển đến tab "Tóm tắt" trong cùng cửa sổ trung tâm bạn đã sử dụng ở trên và nhập "1" (hoặc bất kỳ giá trị nào bạn thích) vào hộp "Xây dựng" (nhưng không phải định dạng chuỗi như 1.0).


Tôi nghĩ rằng tập lệnh hex tôi đã cung cấp đầu tiên không hợp lệ để gửi lên App Store. Đây là cùng một kịch bản sử dụng số học thập phân.

#!/bin/bash  
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
((bN += 1)) 
bN=$(printf "%d" $bN) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE" 
+0

cảm ơn rất nhiều. (10char) – phlebotinum

+0

Tôi rất ngạc nhiên khi biết rằng số phiên bản hex không vượt qua việc xác thực cho App Store. Tôi đang đăng một trả lời dưới đây với một phiên bản sửa đổi của kịch bản mà số học thập phân. Xem bên dưới. – RobertL

+0

Tôi đã tiếp tục và chỉnh sửa trong tập lệnh thập phân của bạn ở cuối câu trả lời này. Bằng cách đó, các câu trả lời khác có thể được gỡ bỏ, cắt giảm một số trên lộn xộn. – thegrinner

0

Trong Swift:

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String 
Các vấn đề liên quan