16

シミュレーターでアプリのビルド日を表示することはできますが、アプリをアーカイブしてTestFlightにアップロードし、デバイスにインストールすると、ビルド日が表示されません。

ビルド日を表示するために私が行っていることは次のとおりです。

まず、CFBuildDateを文字列としてmyproject-info.plistに追加しました

次に、次のスクリプトを[スキームの編集]->[ビルド]->[プレアクション]->[スクリプトアクションの実行]に追加しました。

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
/usr/libexec/PlistBuddy -c "Add :CFBuildDate $builddate" ${infoplist}
/usr/libexec/PlistBuddy -c "Set :CFBuildDate $builddate" ${infoplist}
fi

最後に、次のコードを使用して、plistファイルからビルド日付を取得しました。

NSString *build_date = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBuildDate"];

これにより、シミュレーターにビルド日が表示されますが(表示されない場合もあります)、TestFlightを介してアプリをデプロイする場合、ビルド日は表示されません。何か案は ?

前もって感謝します。

4

7 に答える 7

28

アプリがビルドされた日時の文字列表現を返すビルトインマクロの使用を検討すること__DATE__もできます。__TIME__おそらく、彼らはあなたにもっと役立つでしょう:

NSString *dateStr = [NSString stringWithUTF8String:__DATE__];
NSString *timeStr = [NSString stringWithUTF8String:__TIME__];
于 2012-08-02T15:10:52.757 に答える
12

'yyMMddHHmm'形式のビルド日付を取得するには、次のことを試してください。

+ (NSString *)GetBuildDate {
    NSString *buildDate;

    // Get build date and time, format to 'yyMMddHHmm'
    NSString *dateStr = [NSString stringWithFormat:@"%@ %@", [NSString stringWithUTF8String:__DATE__], [NSString stringWithUTF8String:__TIME__]];

    // Convert to date
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"LLL d yyyy HH:mm:ss"];
    NSDate *date = [dateFormat dateFromString:dateStr];

    // Set output format and convert to string
    [dateFormat setDateFormat:@"yyMMddHHmm"];
    buildDate = [dateFormat stringFromDate:date];

    [dateFormat release];

    return buildDate;
}
于 2013-07-15T11:05:28.040 に答える
8

スクリプトは、スキームのアクション前のステップではなく、ビルドフェーズのステップとして実行してみてください。そうすれば、作成しているビルドのタイプに関係なく、常に実行されます。

于 2012-08-02T19:43:56.997 に答える
7

Swift3

static var buildDate: Date? {
    guard let infoPath = Bundle.main.path(forResource: "Info.plist", ofType: nil) else {
        return nil
    }
    guard let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath) else {
        return nil
    }
    let key = FileAttributeKey(rawValue: "NSFileCreationDate")
    guard let infoDate = infoAttr[key] as? Date else {
        return nil
    }
    return infoDate
}

static var prettyBuildDate: String {
    guard let date = buildDate else {
        return "Unknown"
    }
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
    formatter.timeZone = TimeZone(abbreviation: "UTC")
    return formatter.string(from: date)
}
于 2016-11-14T19:54:03.487 に答える
5

再定義する__DATE____TIME__ 、アプリをビルドするたびに時刻が更新されます。時間を更新するためにクリーンアップやアーカイブを行う必要はありません。プロジェクトを実行するだけです。

  #define DATE [NSString stringWithUTF8String:__DATE__]
  #define TIME [NSString stringWithUTF8String:__TIME__]


- (NSString *)getBuildDate {
    NSString *buildDate;

    // Get build date and time, format to 'yyMMddHHmm'
    NSString *dateStr = [NSString stringWithFormat:@"%@ %@", DATE , TIME ];

    // Convert to date
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"LLL d yyyy HH:mm:ss"];
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    [dateFormat setLocale:usLocale];
    NSDate *date = [dateFormat dateFromString:dateStr];

    // Set output format and convert to string
    [dateFormat setDateFormat:@"dd/MM/yyyy-HH:mm"];
    buildDate = [dateFormat stringFromDate:date];

    return buildDate;
}
于 2015-12-11T13:23:37.723 に答える
0

macOSでは、このコードを使用します。このコードは、アプリのInfo.plistコンテンツからビルド日を取得します。iOSでも動作する可能性がありますが、確認していません。

+ (NSDate *)buildDate {
    static NSDate *result = nil;
    if (result == nil) { 
        NSDictionary *infoDictionary = NSBundle.mainBundle.infoDictionary;
        NSString *s = [infoDictionary valueForKey:@"BuildDateString"];
        NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
        NSDate *d = [formatter dateFromString:s];
        result = d;
    }
    return result;
}
于 2021-07-07T14:59:54.913 に答える
-4

Swift5

let compileDate = String(Date())
let df = DateFormatter()
df.dateFormat = "MMM-dd-yyyy"
let usLocale = NSLocale(localeIdentifier: "en_US")
df.locale = usLocale
let aDate: Date? = df.date(from: compileDate)
于 2019-07-23T18:36:05.177 に答える