xcode 10 svn




在Xcode中插入Subversion版本號 (5)

作為Stack Overflow的新用戶,我無法對Quinn的帖子發表評論,但是如果你使用的是一次有多個項目的SVN存儲庫,我會做一些小改動以使他的解決方案更加準確。

使用他的方法,返回的svnversion號是整個存儲庫的最後一個簽入,不一定是您的代碼庫。 此調整允許更新特定於您的代碼庫。

REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $REV" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}

使用-c標誌將以下列形式收集代碼庫的活動分支/標記/主幹中的最後一次提交,然後將您不想存儲的位作為修訂號。

另外,請注意$ {TARGET_BUILD_DIR}周圍的雙引號。 對於決定將項目放在名稱中帶有空格的目錄結構中的用戶來說,這些是必需的。

希望這有助於他人!

我想將當前的Subversion修訂版號(由svnversion報告)插入到我的Xcode項目中。 我設法將修訂號插入到$PROJECT_DIRInfo.plist中,但這不是一個好的解決方案,因為該文件是版本化的。 我試圖將修訂版插入到構建目錄中的Info.plist中,但是在代碼簽名階段我遇到了一個錯誤(這是一個iPhone應用程序)。

是否有一種簡單的方法可以使用某些構建文件將修訂號放入應用程序中,以便更改版本不會更改版本化文件? 我想也許我可以創建一個臨時源文件,該文件將與其他文件鏈接並提供獲取修訂號的功能。 但我不知道該怎麼做。

我對其他解決方案不太感興趣,即。 agvtool 。 我想要的只是應用程序可用的修訂版號,沒有太大的魔力。


另一個版本,用Apple Script編寫。 可以更改previousValue的Regexp,目前它僅支持XX.XX.XX格式的版本(major,minor,svn rev)。

/usr/bin/osascript

set myVersion to do shell script "svn info | grep \"^Revision:\""
set myVersion to do shell script "echo " & quoted form of myVersion & "| sed 's/Revision: \\([0-9]\\)/\\1/'" as string

set myFile to do shell script "echo ${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
set theOutputFolder to myFile as string
set thePListPath to POSIX path of (theOutputFolder & "Info.plist")
tell application "System Events"
   tell property list file thePListPath
      tell contents
         set previousValue to value of property list item "CFBundleVersion"

         set previousValue to do shell script "echo " & quoted form of previousValue & "| sed 's/\\([0-9]*\\.[0-9]*\\)\\(\\.[0-9]*\\)*/\\1/'" as string

         set value of property list item "CFBundleVersion" to (previousValue & "." & myVersion)
      end tell
   end tell
end tell

我試圖為我的iPhone應用程序做類似的事情時發現了這個頁面,並認為分享我決定的代碼可能會有所幫助。 我試圖在我的目標信息中設置基本版本號(例如0.9.5),但隨後在其末尾附加我的SVN修訂號。 我需要將它存儲在CFBundleVersion中,以便即使我不記得在我的目標信息窗格中修改版本號,AdHoc用戶也可以通過iTunes進行更新。 這就是為什麼我不能使用“revision.h”方法,否則它會很好地工作。 這是我在“複製捆綁資源”構建階段之後作為運行腳本階段確定的最終代碼:

BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${INFOPLIST_FILE}" | sed 's/,/, /g'`
REV=`svnversion -n`
SVNDATE=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
/usr/libexec/PlistBuddy -c "Set :BuildDateString $SVNDATE" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}

它應該將svnversion的結果附加到基本Info.plist中設置的任何結尾作為版本。 通過這種方式,您可以在信息plist中使用0.9.5之類的內容,並在最後添加.189修訂版號,最終版本號為0.9.5.189

希望這有助於其他人!


既然我不能評論Quinn的答案:

如果您使用的是MacPorts svn客戶端,可能需要在我的情況下包含svnversion命令的完整路徑,/ opt / local / bin / svnversion。 我還在svnversion中添加了-c選項。

此外,如果您只對混合修訂版的第二個版本號感興趣,請在調用中添加“cut”命令,如下所示:

echo -n "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" \
| xargs -0 /usr/libexec/PlistBuddy -c "Set :CFBundleVersion `/opt/local/bin/svnversion -nc | cut -f2 -d:`"

# Xcode auto-versioning script for Subversion
# by Axel Andersson, modified by Daniel Jalkut to add
# "--revision HEAD" to the svn info line, which allows
# the latest revision to always be used.
#
# modified by JM Marino to change only [BUILD] motif
# into CFBundleGetInfoString key.
#
# HOW TO USE IT: just add [BUILD] motif to your Info.plist key :
#       CFBundleVersion
#
# EXAMPLE: version 1.3.0 copyright 2003-2009 by JM Marino
# with [BUILD] into CFBundleVersion key

use strict;

die "$0: Must be run from Xcode" unless $ENV{"BUILT_PRODUCTS_DIR"};

# Get the current subversion revision number and use it to set the CFBundleVersion value
#my $REV = `/usr/local/bin/svnversion -n ./`;
my $REV = `/usr/bin/svnversion -n ./`;
my $INFO = "$ENV{BUILT_PRODUCTS_DIR}/$ENV{WRAPPER_NAME}/Contents/Info.plist";

my $version = $REV;

# (Match the last group of digits without optional letter M | S):
($version =~ m/(\d+)[MS]*$/) && ($version = "" . $1);

die "$0: No Subversion revision found" unless $version;

open(FH, "$INFO") or die "$0: $INFO: $!";
my $info = join("", <FH>);
close(FH);

#$info =~ s/([\t ]+<key>CFBundleVersion<\/key>\n[\t ]+<string>.+)\[BUILD\](<\/string>)/$1$version$2/;
$info =~ s/([\t ]+<key>CFBundleVersion<\/key>\n[\t ]+<string>)\[BUILD\](<\/string>)/$1$version$2/;

open(FH, ">$INFO") or die "$0: $INFO: $!";
print FH $info;
close(FH);




svn