iOS:コードでapp-info.plist変数にアクセスする


102

ユニバーサルアプリに取り組んでいますが、コードのapp-info.plistファイルに保存されている値にアクセスしたいと考えています。

理由:以下を使用して、ストーリーボードから動的にUIViewControllerをインスタンス化します。

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

さて、上のストーリーボード名@ "MainStoryboard_iPhone"は醜いです。

私は次のようなことをしたいです:

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

ここで、appInfoはおそらくapp-info.plistのすべての値のNSDictionaryである可能性があります

回答:


253

プロジェクトのinfo.plistの属性には、次の方法で直接アクセスできます...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

たとえば、バージョン番号を取得するには、次のようにします

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

バージョン番号がinfo.plistに2つの属性を持っているという落とし穴があります。info.plistをソースコードとして表示する場合(info.plistを右クリックして[名前を付けて開く]を選択)、使用できるさまざまなキー名がすべて表示されます。


5
この投稿の@Answerbotで述べられているように:stackoverflow.com/a/4059118/1210822:「CFBundleVersionはビルドのために再利用され、バージョンはCFBundleShortVersionStringです。」plistからバージョン番号を取得するために、NSString *を使用する必要があります。 version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@ "CFBundleShortVersionString"];
sonoshin 2012年

11.3では、NSBundleの名前が変更され、新しいバンドルにはまだ含まれていないため、機能しません。xouにアップデートはありますか?
イヴォンヌマルググラフ

Web経由で配布されるエンタープライズiOSアプリがある場合、キー/値のペアをPLISTファイルに追加して、ダウンロード時にアプリからそれらの値を読み取ることはできますか?
ブラント

AppDelegate.mからCFBundleVersionの値を更新するにはどうすればよいですか?
pragnesh


12

まああなたは非常に簡単にinfo.plistにアクセスできます:

ストーリーボードの名前を取得する:

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

それがiPadにあるかどうかを検出し、表示されているUIMainStoryboardFile~ipadキーを使用する必要があるかどうかは不明です。


6
XCodeは、デバイスに応じて、キー「UIMainStoryboardFile」にiPhone / iPad Storyboardファイルを自動的に入力します:)
sherlock

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

また、NSDictionaryのを使用することができます:NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
ダリウスMiliauskas

6

NSBundleでinfoDictionaryメソッドを使用することもできます。

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.