2012-03-02 41 views
79

Tôi đang làm việc trên ứng dụng Universal & muốn truy cập các giá trị được lưu trữ trong tệp app-info.plist trong mã của tôi.iOS: Truy cập các biến app-info.plist trong mã

Lý do: tôi nhanh chóng một UIViewController động từ một kịch bản sử dụng:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"]; 

Bây giờ, có tên storyboard @ "MainStoryboard_iPhone" ở trên là xấu xí.

tôi muốn làm một cái gì đó như:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:appInfo.mainStoryboardBaseNamePhone bundle:nil]; 
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"]; 

nơi appInfo có lẽ có thể là một NSDictionary của tất cả các giá trị trong app-info.plist

Trả lời

224

Thuộc tính từ info.plist cho dự án của bạn là truy cập trực tiếp bởi những điều sau đây ...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name]; 

Ví dụ để có được số phiên bản bạn có thể làm như sau

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; 

Có một lưu ý rằng số phiên bản hiện có hai thuộc tính trong info.plist - nhưng bạn có ý tưởng? Nếu bạn xem info.plist của bạn dưới dạng mã nguồn (nhấp chuột phải vào info.plist - chọn Open As) thì bạn sẽ thấy tất cả các tên khóa khác nhau mà bạn có thể sử dụng.

+5

Là đàn ông được tioned bởi @Answerbot trong bài đăng này: http: //stackoverflow.com/a/4059118/1210822: "CFBundleVersion đã được định lại thành Phiên bản và Phiên bản là CFBundleShortVersionString", vì vậy bây giờ để truy xuất số phiên bản từ plist, chúng tôi cần phải sử dụng : NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; – sonoshin

11

Vâng, bạn có thể acces info.plist rất easly: ​​

Bắt tên của kịch bản:

NSString *storyboard = [[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"]; 

Không chắc thời tiết nó sẽ phát hiện nếu nó nằm trong một iPad và nó nên sử dụng Đã kích hoạt UIMainStoryboardFile~ipad khóa.

+6

XCode tự động điền khóa 'UIMainStoryboardFile' bằng các tệp Storyboard iPhone/iPad, tùy thuộc vào thiết bị :) – sherlock

8
NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"]; 
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
+0

Bạn cũng có thể sử dụng NSDictionary: 'NSDictionary * dict = [Từ điển NSDictionaryWithContentsOfFile: đường dẫn]; –

+0

không hoạt động với tôi –

+0

đang hoạt động anh chàng tốt –

4

Bạn cũng có thể sử dụng phương pháp infoDictionary trên NSBundle:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary]; 
NSString *version = infoPlistDict[@"CFBundleVersion"]; 
8

Swift 4+ cú pháp cho Damo's solution

Bundle.main.object(forInfoDictionaryKey: "KEY_NAME") 

Ví dụ

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") 
Các vấn đề liên quan