2011-10-30 11 views
15

Cuối cùng ... sau một vài năm xem và một tháng tham gia, tôi có cơ hội hỏi các bạn một câu hỏi của riêng tôi.cách lấy XCode để thêm ngày và giờ xây dựng vào tệp Info.plist

Ông chủ của tôi không tin tưởng tôi (hoặc bất kỳ quy trình nào) để tăng số bản dựng, anh ấy cũng muốn có ngày xây dựng & thời gian được đưa vào ứng dụng. Tôi muốn đặt điều này vào tệp Info.plist thông thường.

Tôi thấy câu hỏi có liên quan này:

Build information in iOS Application (date/time app was built)

và dựa trên các câu trả lời đó, tôi đi vào Scheme Editor và thêm vào kịch bản dưới đây để "Đăng Hành động" của giai đoạn xây dựng:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    defaults write "${infoplist%.plist}" BuildDate "${builddate}" 
fi 

Trong XCode, cửa sổ Đề án biên tập của tôi trông như thế này:

Thật không may, BuildDate không bao giờ được viết vào Info.plist.

Thay đổi "$ {builddate}" thành "$ builddate" cũng không hoạt động. Tôi đã thêm dòng này vào tập lệnh:

echo "build date is $builddate" > /tmp/result.txt 

và ngày xuất hiện hoàn toàn tốt trong tệp được viết ra. Việc viết các chuỗi vào tệp Info.plist từ tập lệnh trên hoạt động hoàn toàn tốt, đủ khó chịu.

Vì vậy, tóm tắt, cách lấy ngày được thêm vào tệp Info.plist?

+0

tôi không có bất kỳ vấn đề sử dụng của bạn kịch bản như một hành động bài, ngoại trừ việc nó kết thúc bằng việc đánh dấu chữ ký. Dường như làm việc tốt như giai đoạn xây dựng thay vì một hành động sau, mà cũng có lợi ích của việc làm việc cho dù bạn chia sẻ không gian làm việc hay không. Nó cũng hoạt động tốt hơn so với một hành động trước vì một hành động trước sẽ bị blitzed bởi những thay đổi đối với info.plist thực sự gây ra ghi đè thời gian xây dựng. – smparkes

Trả lời

4

Mã trong câu trả lời của Michael không chính xác hoặc không còn cập nhật. Phiên bản dưới đây sửa lỗi trong cú pháp đã đặt và cũng hỗ trợ xây dựng đường dẫn với khoảng trống trong chúng.

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

Lưu ý: Sự thay đổi này đã được gửi như một chỉnh sửa nhưng đã bị từ chối và tôi chưa có đủ uy tín để viết bình luận về câu trả lời của mình ...

2

Tôi đang sử dụng mã chính xác của bạn, nhưng trong hành động trước thay vì sau hành động và thông tin.plist bên trong sản phẩm được xây dựng sẽ báo cáo chính xác ngày xây dựng. Nói cách khác, bạn phải tùy chỉnh info.plist trước khi sao chép nó vào sản phẩm được tạo sẵn, điều này nghe có vẻ hợp lý với tôi.

Nhân tiện, cảm ơn đề xuất, nó khá thông minh và hữu ích.

+0

Nếu bạn làm điều này trong một hành động trước và sau đó thực sự cập nhật info.plist, các thay đổi của bạn sẽ bị blitzed trong bản cập nhật. Có thể không quan trọng nhiều, vì info.plist không được cập nhật nhiều. – smparkes

5

Ahhhh, tôi nên đã dành thêm 30 phút (trên 2 giờ tôi đã lãng phí) và nhìn vào các câu trả lời cho câu hỏi này trước khi gửi bài của riêng tôi:

Insert Subversion revision number in Xcode

này kịch bản sau hành động thực hiện thủ thuật và hoạt động cho tôi:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

Như bạn có thể thấy, nó đang làm một chút hack ở đó (thêm nó nếu nó không tồn tại; đặt ngay sau đó).

Nếu bất cứ ai có thể đề xuất giải pháp bằng cách sử dụng phương pháp "mặc định viết" ở trên (mà tôi cho rằng có thể được hỗ trợ tốt hơn "PlistBuddy"), tôi sẽ vui mừng tìm hiểu (và tất nhiên tôi sẽ chấp nhận và sử dụng câu trả lời cao cấp đó).