iOSアプリ、プログラムでビルドバージョンを取得


回答:


284

Xcodeターゲットの要約の「バージョン」フィールドに設定した値は、次のとおりです。

スウィフト3

let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String

ObjC

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

スウィフト2

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String

そして「ビルド」:

スウィフト3

let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String

ObjC

NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];

スウィフト2

let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String

5
定数ではなく文字列リテラルを使用することは、将来性がないわけではありません。定数キーについては、Anupdasの回答を参照してください。
アーロンブラジャー2013年

9
あなたは@ "CFBundleVersion"に適しています-私は私の回答を編集しました。ただし、@ "CFBundleShortVersionString"の場合、一定のAFAIKはありません。
e1985

Swiftの場合、NSBundle.mainBundle()現在Bundle.main
Toddが

85

あなたはinfoDictionaryを使って試すことができます

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]; 

13
kCFBundleVersionKeyは「バージョン」ではなく「ビルド」です
powerj1984

11

使用する場合はMFMailComposeViewController、「お問い合わせ」ボタンのために、私は、ユーザーからの電子メールでget AフォーマットされたHTMLにこのコードを使用します。問題の解決を支援するために必要なすべての情報が得られます。

struct utsname systemInfo;
uname(&systemInfo);

NSDateFormatter *formatter = [[NSDateFormatter alloc]  init];
NSDate  *date = [NSDate date];
[formatter setDateFormat:@"MM/dd/yyyy 'at' hh:mm a"];
NSString *dateString = [formatter stringFromDate:date];

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width - 65.0;

NSString *comments = NSLocalizedString(@"Please write your comments below:", nil);
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSString *iOSVersion = [[UIDevice currentDevice] systemVersion];

NSString *emailBody = [NSString stringWithFormat:@"<!DOCTYPE html><html><style> .div {background-color: lightgrey; width: %fpx; padding: 10px; border: 5px solid navy; margin: 2px;}</style><body><div class='div'><p><b>App:</b> %@</p><b><p>Device:</b> %@</p><b><p>iOS Version:</b> %@</p><b><p><p>App Version and Build:</b> %@ (%@)</p><b><p>Date:</b> %@</p> </p></div><font color='red'><b>%@</b></font><br><br></body></html>",screenWidth,appName,deviceModel,iOSVersion,version,build,dateString,comments];

[self setMessageBody:emailBody isHTML:YES];

これはメッセージを受け取ったときの結果です:

ここに画像の説明を入力してください


3

両方のSwiftバージョンを個別に:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

このレポに含まれています、チェックしてください:

https://github.com/goktugyil/EZSwiftExtensions


そのリポジトリを所有していることを明確にする必要があります。あなたはスパマーとして脱落したくありません。
JAL

2

細部

  • Xcodeバージョン10.3(10G8)、Swift 5

解決

class Info {
    static let dictionary = Bundle.main.infoDictionary ?? [:]
    enum Value {
        case build, version
    }
}

extension Info.Value {

    var key: String {
        switch self {
            case .build: return kCFBundleVersionKey as String
            case .version: return kCFBundleInfoDictionaryVersionKey as String
        }
    }

    var string: String? { return Info.dictionary[key] as? String }
}

使用法

if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }

結果

プロジェクト設定

ここに画像の説明を入力してください


1

私はまさにこの目的のためにこのオープンソースプロジェクトを書きました。ユーザーが初めてアプリを開いたときや、アップグレード後にアプリを開いたとき(ユーザーがどのバージョンからアップグレードしたかについての情報が含まれています)など、重要なイベントが発生すると、私のプロジェクトは通知を投稿します。ソースは簡単で、理解しやすいはずです。ご不明な点がございましたら、お気軽にお問い合わせください。

私は最近それについてのブログ投稿も書きました。


1

1)アプリのバージョンを取得するには、以下を使用する必要があります。

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2)ビルドバージョンを取得するには、以下を使用する必要があります。

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