iOS: Mengakses variabel app-info.plist dalam kode


103

Saya sedang mengerjakan aplikasi Universal & ingin mengakses nilai yang disimpan dalam file app-info.plist dalam kode saya.

Alasan: Saya membuat instance UIViewController secara dinamis dari storyboard menggunakan:

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

Sekarang, memiliki nama storyboard @ "MainStoryboard_iPhone" di atas itu jelek.

Saya ingin melakukan sesuatu seperti:

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

di mana appInfo mungkin bisa menjadi NSDictionary dari semua nilai di app-info.plist

Jawaban:


253

Atribut dari info.plist untuk proyek Anda dapat langsung diakses oleh berikut ini ...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

Misalnya untuk mendapatkan nomor versi Anda dapat melakukan hal berikut

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

Ada gotcha di mana nomor versi sekarang memiliki dua atribut di info.plist - tetapi Anda mengerti? Jika Anda melihat info.plist Anda sebagai kode sumber (klik kanan info.plist - pilih Open As) maka Anda akan melihat semua nama kunci yang dapat Anda gunakan.


5
Seperti yang disebutkan oleh @Answerbot dalam posting ini: stackoverflow.com/a/4059118/1210822 : "CFBundleVersion telah diubah fungsinya menjadi Build dan Version adalah CFBundleShortVersionString", jadi sekarang untuk mengambil nomor versi dari plist, kita perlu menggunakan: NSString * versi = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"];
sonoshin

untuk 11.3 tidak berfungsi, karena NSBundle telah diganti namanya dan Bundle baru belum menyertakannya. Apakah Anda memiliki Pembaruan?
Yvonne Marggraf

Jika saya memiliki aplikasi iOS Perusahaan yang didistribusikan melalui web, dapatkah saya menambahkan pasangan kunci / nilai di file PLIST, dan kemudian membaca nilai tersebut dari aplikasi pada saat mengunduh?
Brant

bagaimana kita dapat memperbarui nilai CFBundleVersion dari AppDelegate.m?
pragnesh

26

Sintaks cepat 4+ untuk solusi Damo

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

Contoh

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")

Untuk pemula seperti saya, Bundlemembutuhkanimport SystemConfiguration
GrafOrlov

12

Anda dapat mengakses info.plist dengan sangat mudah:

Mendapatkan nama papan cerita:

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

Tidak yakin apakah itu akan mendeteksi apakah itu di iPad dan itu harus menggunakan UIMainStoryboardFile~ipadkunci yang dipasang.


6
XCode secara otomatis mengisi kunci 'UIMainStoryboardFile' dengan file Storyboard iPhone / iPad, tergantung pada perangkatnya :)
sherlock

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

Anda juga dapat menggunakan NSDictionary:NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
Darius Miliauskas

6

Anda juga dapat menggunakan metode infoDictionary di NSBundle:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.