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.