2012-08-02 22 views
14

मैं सिम्युलेटर में अपने ऐप के लिए बिल्ड डेट प्रदर्शित करने में सक्षम हूं, लेकिन जब भी मैं ऐप संग्रह करता हूं, और इसे टेस्टफलाइट पर अपलोड करता हूं, और उसके बाद इसे किसी डिवाइस पर इंस्टॉल करता हूं, तो बिल्ड तिथि प्रदर्शित नहीं होती है ।ऐप की बिल्ड तिथि दिखा रहा है

बिल्ड बिल्ड को प्रदर्शित करने के लिए मैं क्या कर रहा हूं।

पहले, मैं एक स्ट्रिंग MyProject-Info.plist को

अगला रूप CFBuildDate कहा, मैं योजना संपादित करने के लिए निम्न स्क्रिप्ट जोड़ा -> बिल्ड -> पूर्व क्रियाएं -> चलाएँ स्क्रिप्ट कार्रवाई:

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

यह प्रदर्शित करता है में निर्माण की तारीख:

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 फ़ाइल से निर्माण की तारीख पाने के लिए निम्नलिखित कोड का इस्तेमाल किया सिम्युलेटर (हालांकि कभी-कभी यह नहीं होता), लेकिन जब टेस्टफलाइट के माध्यम से ऐप को तैनात करते हैं, तो बिल्ड की तारीख कभी प्रदर्शित नहीं होती है। कोई विचार ?

अग्रिम धन्यवाद।

+1

एक * निर्माण कदम के रूप में स्क्रिप्ट चलाने की कोशिश करें * तो यह सब समय चलाए जाने के दौरान, निर्माण के प्रकार आप पैदा कर रहे हैं की परवाह किए बिना। – trojanfoe

+0

आपको बिल्ड तिथि की आवश्यकता क्यों है? – AppHandwerker

+0

@trojanfoe - तो मैंने बिल्ड चरणों में एक नई रन स्क्रिप्ट के रूप में एक ही स्क्रिप्ट को जोड़ा। कोशिश करेंगे कि परिणाम के साथ आप पर वापस आ जाओ। – Myxtic

उत्तर

7

के प्रकार के बजाय एक योजना पहले से कार्रवाई कदम से, एक निर्माण चरण कदम के रूप में स्क्रिप्ट चलाने की कोशिश करें, तो यह सब समय चलाए जाने के दौरान, परवाह किए बिना निर्माण आप उत्पादन कर रहे हैं।

25

आप अंतर्निहित __DATE__ और __TIME__ मैक्रोज़ का उपयोग करने पर विचार कर सकते हैं जो ऐप के निर्माण और दिनांक की एक स्ट्रिंग प्रस्तुति वापस करेगा। शायद वे तुम्हें करने के लिए और अधिक मदद की हो जाएगा:

NSString *dateStr = [NSString stringWithUTF8String:__DATE__]; 
NSString *timeStr = [NSString stringWithUTF8String:__TIME__]; 
+0

+1 ने कोशिश नहीं की है, लेकिन एक सुरुचिपूर्ण समाधान की तरह दिखता है। धन्यवाद ! – Myxtic

+0

यह एक अच्छा समाधान है, हालांकि दिनांक/समय 'Info.plist' फ़ाइल के भीतर नहीं है, और इसलिए बाहरी रूप से दिखाई नहीं दे रहा है। – trojanfoe

+0

'बाहरी रूप से दृश्यमान' क्या है? यह build_date चर के लिए सुलभ होगा। – Jeremy

11

प्रारूप '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; 
} 
+2

नाइस बनाने का टाइमस्टैम्प नहीं है :) लेकिन न भूलें लोकेल सेट करें, या यह हर जगह काम नहीं करेगा। \t [dateFormatter setLocale: [NSLocale localeWithLocaleIdentifier: @ "en_US"]]; –

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; 
} 
+0

बेस्ट उत्तर, tnx – vinidog

5

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) 
} 
+0

यह आपकी ऐप जानकारी अपडेट करते समय '__DATE__' के साथ एक सतत परिणाम नहीं दे रहा है। प्लिस्ट वही रहेगा जबकि' __DATE__' अपडेट के समय तक उचित अपडेट हो जाएगा। –

संबंधित मुद्दे