วิธีที่ดีกว่าในการเพิ่มหมายเลขบิวด์?


133

ฉันใช้เชลล์สคริปต์เป็นส่วนหนึ่งของกระบวนการสร้าง Xcode ของฉันเพื่อเพิ่มหมายเลขบิลด์ภายในไฟล์plistแต่มันทำให้ Xcode 4.2.1 ขัดข้องบ่อยครั้ง (มีข้อผิดพลาดเกี่ยวกับเป้าหมายที่ไม่ได้เป็นของโปรเจ็กต์ฉันเดาว่า การเปลี่ยนไฟล์plistทำให้ Xcode สับสนไม่ทางใดก็ทางหนึ่ง)

เชลล์สคริปต์ทำสิ่งนี้เพื่อให้หมายเลขบิลด์เพิ่มขึ้นagvtoolเมื่อไฟล์ใหม่กว่าไฟล์plist เท่านั้น (ดังนั้นการสร้างไม่ได้เพิ่มค่า):

if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi

มีวิธีเพิ่มหมายเลขบิลด์ (ในไฟล์plistหรือที่อื่น ๆ ) ที่ไม่ทำลาย Xcode หรือไม่

แก้ไข FINAL : ตอนนี้ผมทำชนิดของสิ่งนี้ใช้สคริปต์หลามที่ฉันได้ทำเพียงสาธารณะบนGitHub ไม่ได้มีการจัดทำเอกสารไว้อย่างดี แต่ไม่น่าจะยากที่จะหาข้อมูลออกมา ในฐานะโบนัส repo นี้ยังมีสคริปต์ที่มีประโยชน์ในการรวมไลบรารีของบุคคลที่สามไว้ในแอปบันเดิลโดยอัตโนมัติ


1
หากใครสนใจ: ฉันแก้ไขสคริปต์เล็กน้อยเพื่อใช้เลขฐานสิบหกแทนเลขฐานสิบ - gist.github.com/sascha/5398750
Sascha

1
คุณสามารถเพิ่มสคริปต์นี้เป็นแอ็คชันก่อนสร้างได้โดยตรงโดยไม่จำเป็นต้องเรียกใช้สคริปต์ภายนอก อย่ารันสคริปต์นี้ด้วยเฟสการสร้าง Xcode จะคัดลอกเฉพาะ plist ที่อัปเดตทุกบิลด์อื่น ๆ
Ed McManus

3
พร้อมใช้งานฉันได้รับข้อผิดพลาด "ปฏิเสธการอนุญาต" ดังนั้นคิดว่าฉันจะชี้ไปที่ถาม & ตอบนี้กับคนอื่นที่ประสบปัญหาเดียวกัน: stackoverflow.com/q/9850936/519030
Jason

สคริปต์นี้ล้มเหลวด้วยรหัสทางออก 1 ใครสามารถช่วยฉันได้บ้าง?
Robert J.Clegg

@Tander ดูเหมือนว่าคุณไม่ได้ส่งไฟล์ plist มาเป็นอาร์กิวเมนต์ให้กับสคริปต์
โทรจัน

คำตอบ:


29

หากฉันเข้าใจคำถามของคุณอย่างถูกต้องคุณต้องการแก้ไขProject-Info.plistไฟล์ซึ่งเป็นส่วนหนึ่งของเทมเพลตโครงการมาตรฐานของ Xcode

เหตุผลที่ฉันถามนี้คือProject-Info.plistโดยปกติอยู่ภายใต้การควบคุมเวอร์ชันและการแก้ไขหมายความว่าจะถูกทำเครื่องหมายเป็นเช่นกันแก้ไข

หากเป็นไปได้ด้วยดีตัวอย่างต่อไปนี้จะอัปเดตหมายเลขบิลด์และทำเครื่องหมายไฟล์ว่าแก้ไขแล้วในกระบวนการซึ่งget_build_numberสคริปต์บางส่วน (เช่นตัวยึดตำแหน่งในตัวอย่างนี้) จะได้รับหมายเลขบิลด์ (อาจเพิ่มขึ้น) ที่คุณ ต้องการใช้:

#!/bin/sh

# get_build_number is a placeholder for your script to get the latest build number
build_number = `get_build_number`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist

PlistBuddy ให้คุณตั้งค่าคีย์ใด ๆ ในไฟล์ plist ไม่ใช่แค่หมายเลขเวอร์ชัน คุณสามารถสร้างไฟล์ plist ทั้งหมดที่คุณต้องการและรวมไว้ในทรัพยากรได้หากจำเป็น จากนั้นสามารถอ่านได้จากกลุ่ม

ในฐานะที่เป็นความต้องการของคุณจะแสดงในรุ่นเกี่ยวกับบานหน้าต่างและสถานที่อื่น ๆ ที่คุณยังสามารถมองเข้าไปในการตั้งค่าและCFBundleGetInfoStringCFBundleShortVersionString


ฉันไม่ต้องการคอมมิตคอมมิต (หรือแท็ก) ในไฟล์plistดังนั้นระบบการเพิ่มอย่างง่ายก็ใช้ได้ (ตามที่ให้ไว้agvtool) อย่างไรก็ตามการแก้ไขplistในระหว่างการสร้างตัวแบ่ง Xcode บ่อยๆ (เนื่องจากการลบสคริปต์มันไม่มี ' t ล้มเหลวครั้งเดียวเมื่อมันพังทุกๆ 3 บิลด์) เป็นไปได้ไหมที่จะใส่ข้อมูลเวอร์ชันในไฟล์plistอื่นและมีข้อมูลนั้นมาพร้อมกับบันเดิลและเข้าถึงได้จากแอพ
โทรจัน

สคริปต์ที่ยอดเยี่ยม - ฉันต้องการรวมสิ่งนี้เข้ากับคำแนะนำของHugues BRเพื่อใช้เฉพาะเมื่อเก็บงานบิลด์ ทำให้ตัวเลขต่ำและไม่สนใจว่าจะมีการสร้าง dev จำนวนมากระหว่างรีลีส
เจย์

5
get_build_number คืออะไร นั่นเป็นเพียงตัวยึดบางส่วนหรือไม่?
chrisp

ใช่get_build_numberเป็นเพียงตัวยึด - อัปเดตคำตอบเพื่อชี้แจง
Monolo

73

ฉันสับสนกับคำตอบมากมายเกี่ยวกับคำถามนี้และไม่มีคำตอบใดที่ทำให้ฉันพอใจ อย่างไรก็ตามในที่สุดฉันก็ได้ส่วนผสมที่ฉันชอบมาก!

เราเพียงแค่ตั้งค่าหมายเลขเวอร์ชันสำหรับผลิตภัณฑ์ที่สร้างขึ้นเป็นจำนวนคอมมิตของ Git สิ่งนี้จะไม่ยุ่งกับการควบคุมแหล่งที่มาของคุณเนื่องจากสคริปต์จะกลายพันธุ์เฉพาะผลิตภัณฑ์ที่สร้างขึ้น

เพิ่มเฟสการสร้าง "เรียกใช้สคริปต์" นี้ต่อท้ายขั้นตอนการสร้างของคุณ:

if [ "${CONFIGURATION}" = "Release" ]; then
    buildNumber=$(git rev-list --count head)
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi

ตั้งค่าเวอร์ชัน Info.plist ในโปรเจ็กต์ของคุณเป็นอะไรก็ได้ที่คุณต้องการมันจะไม่ถูกใช้เมื่อสร้างบิลด์รุ่น ฉันตั้งค่าของฉันเป็นAUTOMATEDหรือDEVELOPMENTเพื่อให้ชัดเจนเมื่อฉันเรียกใช้งานรุ่นการพัฒนา

แค่นั้นแหละ! แอปที่สร้างขึ้นจะมีจำนวนการสร้างที่เพิ่มขึ้นอย่างต่อเนื่อง (ตราบเท่าที่คุณสร้างงานสร้างจากสาขาเดิมเสมอ)

ทำไมฉันถึงชอบวิธีนี้:

  • ง่าย
  • ไม่ก่อให้เกิดมลพิษในประวัติเวอร์ชัน Git
  • CFBundleVersion เป็นไปโดยอัตโนมัติ
  • หมายเลขเวอร์ชันสวยสามารถแก้ไขได้ทุกเมื่อที่ต้องการ

หมายเหตุอื่น ๆ :

  • หากคุณมีส่วนขยายแอปในโปรเจ็กต์ของคุณเพียงแค่ตั้งสคริปต์การสร้างเดียวกันกับเป้าหมายเหล่านั้นด้วย การดำเนินการนี้จะทำให้หมายเลขเวอร์ชันทั้งหมดเป็นแบบอัตโนมัติและซิงค์กัน App Store ต้องการเวอร์ชันส่วนขยายที่ตรงกับแอปหลักของคุณ

การเก็บหมายเลขเวอร์ชันออกจากไฟล์ plist ที่ควบคุมเวอร์ชันเป็นวิธีที่ดีที่สุดโดยเฉพาะอย่างยิ่งหากคุณมี brach ต่อรุ่นและบางครั้งจำเป็นต้องรวมหรือเลือกเชอร์รี่ ขอบคุณ!
Matthew Phillips

15
คุณสามารถใช้git rev-list --count HEADแทนgit rev-list HEAD | wc -l | tr -d ' '.
kennytm

อืม. ฉันพบว่าหากคุณใช้fastlaneเพื่ออัปโหลดบิวด์อัตโนมัติด้วยวิธีนี้คุณจะได้รับ: ERROR ITMS-90058: "บันเดิลนี้ไม่ถูกต้องค่าสำหรับคีย์ CFBundleVersion [DEVELOPMENT] ในไฟล์ Info.plist ต้องเป็นรายการที่คั่นด้วยช่วงเวลาที่ จำนวนเต็มไม่ติดลบสามส่วนมากที่สุด "
fatuhoku

1
ฉันไม่แน่ใจว่าควรจะไปที่ใดฉันวางสคริปต์แรกเป็นขั้นตอนการสร้างแรกและสคริปต์สุดท้ายเป็นขั้นตอนการสร้างสุดท้ายและใช้ได้กับฉัน
Wil Gieseler

1
แน่นอนคุณสามารถยอมรับ Info.plist โดยใช้โซลูชันนี้ - นั่นคือประเด็นทั้งหมด Info.plist ได้รับการตั้งค่าและเช็คอินเสมอโดยตั้งค่าหมายเลขเวอร์ชันเป็น "DEVELOPMENT" ซึ่งจะมีการเปลี่ยนแปลงชั่วคราวในระหว่างขั้นตอนการสร้างจากนั้นตั้งค่าเป็น "DEVELOPMENT" อีกครั้งเพื่อให้ Info.plist มีเสถียรภาพ
Wil Gieseler

38

ฉันใช้แววนี้แล้ว มันทำงานได้ตามที่คาดไว้ https://gist.github.com/sekati/3172554 (เครดิตทั้งหมดไปที่ผู้เขียนต้นฉบับ)

สคริปต์ที่ฉันแก้ไขเมื่อเวลาผ่านไป

xcode-versionString-generator.sh ,

xcode-build-number-generator.sh

เนื่องจากส่วนสำคัญเหล่านี้กำลังช่วยเหลือชุมชนนักพัฒนาฉันจึงสร้างโครงการ GitHub ขึ้นมา ดังนั้นมาพัฒนากันดีกว่า นี่คือโครงการ GitHub: https://github.com/alokc83/Xcode-build-and-version-generator

ฉันได้อัปเดตโค้ดสำหรับการปรับปรุงสคริปต์ทั้งสองเล็กน้อยแล้ว แทนที่จะใช้ด้านล่างคว้าข้อมูลล่าสุดจาก GitHub

สำหรับเวอร์ชัน:

# xcode-version-bump.sh
# @desc Auto-increment the version number (only) when a project is archived for export. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Check the checkbox "Run script only when installing"
# 6. Drag the "Run Script" below "Link Binaries With Libraries"
# 7. Insure your starting version number is in SemVer format (e.g. 1.0.0)

# This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position.
VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'`
NEWSUBVERSION=$(($NEWSUBVERSION + 1))
NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"

สำหรับการสร้าง:

# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below into new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Ensure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

สิ่งนี้จะเพิ่มหมายเลขบิลด์เสมอโดยที่ฉันต้องการให้เพิ่มขึ้นก็ต่อเมื่อไฟล์ต้นฉบับเปลี่ยนไป มันเป็นเพียงสคริปต์ที่ฉันใช้ในปัจจุบันซึ่งมีการตรวจสอบความปลอดภัยน้อยลงและไม่ค่อยเข้าใจถึงสิ่งที่เปลี่ยนแปลงไป
โทรจัน

XCode 5: ตัวแก้ไข (แถบเมนู) →เพิ่มเฟสการสร้าง→เพิ่มเฟสการสร้างไฟล์คัดลอก:
จอนนี่

@trojanfoe: คุณสามารถเรียกใช้สคริปต์นี้เป็นโพสต์คอมมิต hook สถานการณ์นี้จะเพิ่มจำนวนบิลด์เมื่อคุณส่งรหัสของคุณเพื่อทำซ้ำ คำตอบด้านล่างจาก LostInTheTrees คือสิ่งอื่น ๆ ที่คุณอาจอยากทำ
Alix

เชลล์สคริปต์ที่เชื่อมโยงโดย @Alix นั้นแตกต่างจากที่โพสต์ไว้ที่นี่ หากต้องการเพิ่มหมายเลขบิ
วด์

14

รายการทั้งหมดนี้มีประโยชน์อย่างยิ่ง ฉันใช้เคล็ดลับนี้ แต่ตั้งค่าสคริปต์ของฉันเป็นโพสต์คอมมิต hook ใน GIT ดังนั้น CFBundleVersion จะเพิ่มขึ้นหลังจากการกระทำสำเร็จทุกครั้ง สคริปต์ hook จะอยู่ใน. git / hooks บันทึกจะถูกทิ้งไว้ในไดเร็กทอรีโปรเจ็กต์

ตรงตามเกณฑ์พื้นฐานที่สุดของฉัน ฉันต้องการดึงเวอร์ชันจาก GIT และสร้างงานสร้างใหม่ที่ฉันเคยมีมาก่อนหน้านี้ การเพิ่มใด ๆ ที่ทำในระหว่างกระบวนการสร้างจะไม่ทำสิ่งนี้

นี่คือสคริปต์ของฉัน:

#!/bin/sh
#
# post-commit
#
# This script increments the CFBundleVersion for each successful commit
#

plist="./XYZZY/XYZZY-Info.plist"
buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist")
if [ -z "$buildnum" ]; then
    exit 1
fi
buildnumplus=$(expr $buildnum + 1)
/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnumplus" "$plist"

echo $(date) "- Incremented CFBundleVersion to" $buildnumplus >> hookLog.txt

ฉันมีข้อกำหนดเดียวกันนั่นคือเหตุผลที่หมายเลขบิลด์จะเพิ่มขึ้นก็ต่อเมื่อมีการแก้ไขไฟล์ต้นฉบับ ฉันพบว่าสิ่งนี้ทำงานได้ดีมากและไม่ต้องทำการเปลี่ยนแปลงbump_build_number.shสคริปต์ตั้งแต่สร้าง
โทรจัน

14

ฉันไม่รู้ว่าวิธีไหนดีที่สุด แต่ฉันจะโพสต์คำตอบของ Apple ในกรณีที่มีใครกำลังค้นหา ...

ตามโพสต์ Q&A ของ Appleนี้:

ทำเวอร์ชันอัตโนมัติและสร้างตัวเลขโดยใช้ agvtool

คีย์เวอร์ชันและหมายเลขบิลด์ตามลำดับระบุเวอร์ชันทางการตลาดและเวอร์ชันภายในของแอปพลิเคชันของคุณ agvtool เป็นเครื่องมือบรรทัดคำสั่งที่ช่วยให้คุณเพิ่มตัวเลขเหล่านี้โดยอัตโนมัติไปยังหมายเลขสูงสุดถัดไปหรือเป็นจำนวนเฉพาะ

หมายเลขรุ่นจะระบุเวอร์ชันของแอปพลิเคชันของคุณที่ยังไม่ได้เผยแพร่หรือเผยแพร่ มันถูกเก็บไว้ใน Info.plist ของแอปพลิเคชันของคุณเป็นCFBundleVersion(เวอร์ชัน Bundle)

คุณต้องทำตามขั้นตอนต่อไปนี้ในโครงการ Xcode ของคุณ:

  1. เปิดใช้ agvtool

ไปที่บานหน้าต่าง Build Settings ของเป้าหมายของคุณจากนั้นอัปเดตสำหรับการกำหนดค่าบิวด์ทั้งหมดของคุณดังนี้:

  • ตั้งค่าเวอร์ชันโครงการปัจจุบันเป็นค่าที่คุณเลือก

ไฟล์ข้อมูลโปรเจ็กต์ Xcode ของคุณ project.pbxproj มีการCURRENT_PROJECT_VERSIONตั้งค่าบิลด์(เวอร์ชันปัจจุบันของโปรเจ็กต์) ซึ่งระบุเวอร์ชันปัจจุบันของโปรเจ็กต์ของคุณ agvtool ค้นหา project.pbxproj สำหรับCURRENT_PROJECT_VERSION. มันยังคงทำงานต่อไปหากCURRENT_PROJECT_VERSIONมีอยู่และหยุดทำงานมิฉะนั้น ค่าของมันถูกใช้เพื่ออัปเดตหมายเลขบิลด์

  • ตั้งค่าระบบการกำหนดเวอร์ชันเป็น Apple Generic

โดยค่าเริ่มต้น Xcode จะไม่ใช้ระบบการกำหนดเวอร์ชันใด ๆ การตั้งค่าระบบการกำหนดเวอร์ชันเป็น Apple Generic ช่วยให้มั่นใจได้ว่า Xcode จะรวมข้อมูลเวอร์ชันที่สร้างโดย agvtool ทั้งหมดไว้ในโครงการของคุณ

ตั้งค่า Versioning System เป็น Apple Generic

  1. ตั้งค่าเวอร์ชันของคุณและสร้างหมายเลข

agvtool ค้นหา Info.plist ของแอปพลิเคชันของคุณสำหรับเวอร์ชันและหมายเลขบิลด์ของคุณ จะอัปเดตหากมีอยู่และไม่ทำอะไรเลย ตรวจสอบให้แน่ใจว่ามีคีย์CFBundleVersion(Bundle version) และCFBundleShortVersionString(Bundle versions string, short) อยู่ใน Info.plist ดังที่เห็นในภาพด้านล่าง:

ตั้งค่าเวอร์ชันของคุณและสร้างหมายเลข

ออกจาก Xcode จากนั้นไปที่ไดเร็กทอรีที่มีไฟล์โปรเจ็กต์. xcodeproj ของคุณในแอปพลิเคชัน Terminal ก่อนที่จะรันคำสั่งใด ๆ ต่อไปนี้ ไฟล์โปรเจ็กต์. xcodeproj มี project.pbxproj ซึ่ง agvtool ใช้ (นี่คือส่วนที่คุณสามารถเรียกใช้ในสคริปต์แทนบรรทัดคำสั่ง)

การอัปเดตหมายเลขเวอร์ชัน

หากต้องการอัปเดตหมายเลขเวอร์ชันเป็นเวอร์ชันเฉพาะให้เรียกใช้

xcrun agvtool new-marketing-version <your_specific_version>

เช่น:อัปเดตหมายเลขเวอร์ชันเป็น 2.0

xcrun agvtool new-marketing-version 2.0

การอัปเดตหมายเลขรุ่น

หากต้องการเพิ่มหมายเลขบิลด์ของคุณโดยอัตโนมัติให้เรียกใช้

xcrun agvtool next-version -all

ในการกำหนดหมายเลขรุ่นของแอปพลิเคชันของคุณเป็นเวอร์ชันเฉพาะให้เรียกใช้

xcrun agvtool new-version -all <your_specific_version>

เช่น:ตั้งค่าหมายเลขบิลด์เป็น 2.6.9

xcrun agvtool new-version -all 2.6.9

โบนัส:

หากต้องการดูหมายเลขเวอร์ชันปัจจุบันให้เรียกใช้

xcrun agvtool what-marketing-version

หากต้องการดูหมายเลขรุ่นปัจจุบันให้เรียกใช้

xcrun agvtool what-version

7
ปัญหานี้คือ agvtool จะยกเลิกการสร้าง xcode ดังนั้นจึงไม่สามารถรวมเป็นสคริปต์ในขั้นตอนการสร้างได้
Daniel Schlaug

1
คุณไม่สามารถใส่ Bump ผ่าน agvtool ใน build pre-actions ของโครงการได้หรือไม่?
lottadot

ฉันเพิ่มมันเป็นสคริปต์หลังการกระทำสำหรับการสร้างในโครงร่าง วิธีนี้จะเพิ่มขึ้นหลังจากการสร้างสำเร็จและไม่ได้ยกเลิกการสร้าง
ชาด

11

FWIW - นี่คือสิ่งที่ฉันกำลังใช้เพื่อเพิ่มหมายเลขบิลด์สำหรับรุ่นที่เผยแพร่เท่านั้น (ซึ่งรวมถึงการเก็บถาวร) ทำงานได้ดีภายใต้ Xcode 5.1

เพียงคัดลอก / วางข้อมูลโค้ดลงในขั้นตอนการสร้างสคริปต์เรียกใช้โดยตรงใน Xcode:

buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")

if [ "$CONFIGURATION" = "Release" ]; then
buildnum=$((buildnum + 1))
echo "Build number updated to $buildnum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH"
fi;

คุณจะเพิ่ม CFBundleVersion ได้อย่างไร? ใน Xcode 5.1 เป็นสตริงที่มีรูปแบบเช่น "1.0"?
chrisp

1
ในที่สุดก็มีคนทำถูกต้อง :) ทำไมฉันถึงสนใจแต่ละบิวด์ที่ฉันรันบนอุปกรณ์ dev รุ่น (และรุ่นที่เผยแพร่สู่ผู้ทดสอบ) ไม่ใช่รุ่น "อืมย้าย 2px นั้นไปทางซ้าย"
uvesten

7

ขอบคุณสำหรับสคริปต์ มันใช้งานได้ดี

Info.plist ของฉันอยู่ในไดเร็กทอรีย่อยที่มีชื่อที่มีช่องว่างดังนั้นฉันจึงต้องแก้ไข Run Script ด้วยเครื่องหมายคำพูดรอบ ๆ พา ธ plist:

${PROJECT_DIR}/tools/bump_build_number.sh "${PROJECT_DIR}/${INFOPLIST_FILE}"

และเชลล์สคริปต์ในลักษณะเดียวกันกับเครื่องหมายคำพูดรอบเส้นทางทั้งหมด:

#!/bin/sh

if [ $# -ne 1 ]; then
    echo usage: $0 plist-file
    exit 1
fi

plist=$1
dir=$(dirname "$plist")

# Only increment the build number if source files have changed
if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
    buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$plist")
    if [ -z "$buildnum" ]; then
        echo "No build number in $plist"
        exit 2
    fi
    buildnum=$(expr $buildnum + 1)
    /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist"
    echo "Incremented build number to $buildnum"
else
    echo "Not incrementing build number as source files have not changed"
fi

ใช่ว่าจะสมเหตุสมผล ดีใจที่พบว่ามีประโยชน์ ฉันใช้มาโดยไม่มีปัญหาเลยภายใต้ Xcode 4 {2,3,4,5}
โทรจัน

ฉันจะช่วยตัวเองได้ไม่กี่ชั่วโมงถ้าฉันเห็นคำตอบนี้! นอกจากนี้โปรดทราบว่าหมายเลขบิวด์ hte ต้องไม่มีทศนิยมมิฉะนั้น BASH จะคด
Brenden

6

สคริปต์ที่ฉันกำลังใช้อยู่นั้นอ้างอิงจากAlixด้านบนเป็นอย่างมาก การปรับตัวของฉันด้านล่างเพิ่มการตรวจสอบเพื่อทำการเพิ่มอัตโนมัติในรุ่นรีลีส / ที่เก็บถาวรเท่านั้น

หากไม่มีการเปลี่ยนแปลงนั้นจะมีข้อขัดแย้งในการควบคุมเวอร์ชันเนื่องจากผู้พัฒนาแต่ละรายจะเพิ่มหมายเลขบิลด์ตามอัตราของตนเอง และความจริงที่ว่าประวัติคอมไพล์จะถูกปนเปื้อนโดยไม่จำเป็นด้วยหมายเลขบิลด์ที่เปลี่ยนแปลงตลอดเวลา

# xcode-build-bump.sh
# @desc Auto-increment Xcode target build number every time the project is archived
# @src stackoverflow.com/a/15483906
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)

if [ "Release" != "${CONFIGURATION}" ]
then
    exit 0
fi

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

นอกจากนี้ยังสามารถใช้ได้ (ในง่ายขึ้นเล็กน้อยเพื่อคัดลอกและวางรูปแบบ) เป็นส่วนสำคัญ GitHub


5

ฉันอยากจะแนะนำให้ใช้การแก้ไขอัตโนมัติ

Xcode อนุญาตให้สร้างไฟล์ส่วนหัว (ซึ่งสามารถสร้างขึ้นโดยอัตโนมัติในเวลาสร้างและไม่ได้อยู่ใน vcs ของตัวเอง) เพื่อระบุค่าที่จะขยายใน info.plist ในเวลาสร้าง คุณสามารถค้นหาคำแนะนำสำหรับการตั้งค่านี้บนเว็บไซต์ autorevision

Autorevision มีประเภทเอาต์พุตที่มุ่งเน้นไปที่ไฟล์ส่วนหัวประเภทเหล่านี้เพื่อช่วยในสถานการณ์เหล่านี้


1
Autorevisionดูเหมือนว่าจะไม่ชนหมายเลขบิวด์ตามที่ต้องการ?
โทรจัน

สมมติว่าหนึ่งสร้างจากการกระทำใหม่เท่านั้นVCS_NUMควรเป็นสิ่งที่คุณกำลังมองหา ( ดูautorevision.hตัวอย่าง )
dak180

Vienna-Info.plistและVienna-All.xcconfigเป็นตัวอย่างที่ดีในการตั้งค่านี้ในโครงการ xcode ใด ๆ
dak180

4

ปัญหาหนึ่งของโซลูชันเหล่านี้คือLaunch Services รับรู้เฉพาะตัวเลขหลักสี่ห้าหลักในเวอร์ชันบันเดิล ฉันมีโปรเจ็กต์ที่มีหมายเลขบิวด์เป็นหลักพันดังนั้นฉันจึงต้องการใช้ตัวเลขที่มีนัยสำคัญน้อยกว่านี้

สคริปต์ Perl นี้จะเพิ่ม Info.plists ทั้งหมดในโปรเจ็กต์ไม่ใช่เฉพาะสำหรับเป้าหมายปัจจุบันดังนั้นหมายเลขบิลด์ทั้งหมดจะอยู่ในช่วงล็อก นอกจากนี้ยังใช้ตัวเลขแพทช์เดียวและตัวเลขรองสองหลักดังนั้นบิลด์ 1234 จึงได้รับเวอร์ชัน 1.23.4 ฉันใช้มันเป็นพฤติกรรมก่อนสร้างดังนั้นจึงใช้ได้กับทุกโครงการที่ฉันสร้าง

บทนี้ค่อนข้างดุร้าย แต่ก็ใช้ได้ผลสำหรับฉัน

#!/usr/bin/perl

use strict;
use warnings;
use v5.12.0;

use Dir::Iterate;

for my $plist_file(grepdir { /-Info.plist$/ } '.') {
    my $build = `/usr/libexec/PlistBuddy -c "Print CFBundleVersion" '$plist_file'`;
    chomp $build;

    next unless $build;

    # Strip dots
    $build =~ s/\.//g;
    $build =~ s/^0//g;

    # Increment
    $build++;

    # Re-insert dots
    $build =~ s/^(\d{0,4}?) (\d{0,2}?) (\d{0,1}?)$/$1.$2.$3/x;

    # Insert zeroes
    $build =~ s{(^|\.)\.}{${1}0.}g;

    system qq(/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" '$plist_file');
}

โพสต์ที่คุณอ้างถึงระบุว่า 'ได้ผล LS คาดว่าจะมีรูปแบบต่อไปนี้: nnnnn [.nn [.nn]] [X] โดยที่ n คือตัวเลข 0-9 หลักวงเล็บเหลี่ยมจะระบุส่วนประกอบเสริมและ X คือสตริงใด ๆ ที่ไม่ เริ่มต้นด้วยตัวเลข X จะถูกละเว้นเมื่อมีอยู่ '- นั่นคือจำนวนการสร้าง 99999 ครั้ง น่าจะเพียงพอสำหรับโครงการส่วนใหญ่ .. ?
เจย์

@ เจย์ฉันเข้าใจผิดว่าเป็นตัวเลขสี่หลัก อ๊ะ. (ถึงกระนั้นหากรูปแบบการพัฒนาของคุณเกี่ยวข้องกับการปรับแต่งและการสร้างใหม่จำนวนมากก็ไม่น่าเป็นไปได้ที่คุณจะทำได้ถึง 100,000 บิลด์หลังจากพัฒนาโครงการมาหลายปี)
Brent Royal-Gordon

@ BrentRoyal-Gordon True - ฉันได้ปรับแต่งบิลด์สคริปต์ของฉันเพื่อเพิ่มการสร้างสำหรับการกำหนดค่ารุ่นเท่านั้น .. แม้ว่าฉันอาจจะไม่เคยไปถึงที่ใดก็ได้ใกล้ 10k builds แม้ว่าจะมีผลิตภัณฑ์ดั้งเดิมที่มีอายุมากกว่า 10 ปี แต่ก็รู้สึกดีที่มี ห้องใหญ่เต็มไปด้วยโครงการโกโก้ใหม่ ;-)
เจ

4

คุณสามารถใช้เวอร์ชันทั่วไปแอปเปิ้ล โดยพื้นฐานแล้วสิ่งที่คุณต้องทำคือเรียกagvtool next-version -allจากภายในไดเร็กทอรีที่โฮสต์ไฟล์. xcproj ของคุณ สำหรับรายละเอียดเพิ่มเติมโปรดดู url ด้านบน


3
ปัญหาในการแก้ปัญหานี้คือการเรียก agvtool จากภายในสคริปต์ในโปรเจ็กต์จะยกเลิกบิลด์ของคุณ ไม่ใช่วิธีแก้ปัญหาที่ดีเว้นแต่คุณจะหาวิธีแก้ปัญหานี้ได้
Dan Loewenherz

3

จากโซลูชันของ Wil Gieselerฉันมีการเปลี่ยนแปลงเพียงอย่างเดียวที่ต้องการ วิธีการแก้ปัญหาของเขาทำให้จำนวนคอมไพล์คอมมิตลงในหมายเลขบิลด์ มีประโยชน์ แต่ก็ยังเป็นความเจ็บปวดในการค้นหาการกระทำจริงที่สร้างงานสร้างนั้น ฉันไม่สนใจมากเกินไปว่าจำนวนบิลด์จะเพิ่มขึ้นอย่างจำเจหรือไม่และฉันจึงยกเลิกข้อกำหนดนั้นเพื่อที่ฉันจะได้เข้าถึงคอมมิตที่สร้างไบนารีที่กำหนดได้ง่ายขึ้น

ด้วยเหตุนี้ฉันจึงแก้ไขสคริปต์แรกของเขาดังต่อไปนี้:

# Set the build number to the decimal conversion of the short version of the current git SHA

# Get the short version of the current git SHA in hexadecimal
SHA=$(git rev-parse --short @)
# Uppercase any alphabetic chars in SHA (bc doesn't like lowercase hex numbers)
UPPERCASE_SHA=$(tr '[:lower:]' '[:upper:]' <<< "$SHA")
# Use bc to convert the uppercase SHA from hex to decimal
BUILD_NUM=$(bc <<< "ibase=16;obase=A;$UPPERCASE_SHA")
# Set our build number to that
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUM" "${PROJECT_DIR}/${INFOPLIST_FILE}"

# To convert a build number back to a usable git SHA, run the following, substituting the build number for <build number>
# bc <<< "ibase=10;obase=16;<build number>"

สิ่งนี้จะแปลงเวอร์ชันสั้นของ git SHA ปัจจุบันเป็นทศนิยม อักขระเลขฐานสิบหกไม่เหมาะกับข้อกำหนดหมายเลขบิวด์ของ Apple ซึ่งเป็นสาเหตุที่ฉันต้องทำเช่นนี้ ในการแปลงกลับคุณเพียงแค่เรียกใช้สิ่งนี้:

SHA=$(bc <<< "ibase=10;obase=16;<build number>")

ใน bash หมายเลขบิลด์ที่<build number>คุณได้รับจากไบนารีอยู่ที่ไหน จากนั้นเพียงแค่วิ่งgit checkout $SHAและไปที่นั่น

เนื่องจากนี่เป็นการดัดแปลงโซลูชันของWil Gieselerดังที่กล่าวไว้ข้างต้นคุณจึงต้องมีสคริปต์หลังการสร้างต่อไปนี้:

# Set the build number to "DEVELOPMENT"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"

ซึ่งช่วยให้ประวัติคอมไพล์ของคุณสะอาด


มันทำงานอย่างไรเนื่องจากคุณจะเขียนข้อมูลคอมไพล์ลงในInfo.plistซึ่งตัวมันเองถูกติดตามโดยคอมไพล์?
โทรจัน

@trojanfoe ดังที่ฉันได้กล่าวไว้ที่ด้านบนของคำตอบคำตอบนี้เป็นการปรับวิธีแก้ปัญหาของ Wil Gieseler ดังนั้นจึงต้องใช้สคริปต์หลังการสร้างเดียวกับที่ใช้ที่นั่น ฉันได้เพิ่มคำตอบนั้นอย่างชัดเจน
ravron

2

ฉันลองแก้ไขตามขั้นตอนแล้ว แต่ไม่ได้ผลเนื่องจาก: -

  1. Xcode 4.2.1 เปลี่ยนไดเร็กทอรีย่อย xcuserdata ใน. xcodeproj

  2. git บันทึกการเปลี่ยนแปลงก่อนหน้านี้ใน Project-Info.plist

การแก้ไขต่อไปนี้ทำให้สิ่งเหล่านี้ถูกละเว้นและตั้งค่าสถานะเฉพาะการเปลี่ยนแปลงของแท้เท่านั้น: -

if [ -n "$(find $dir \! -path "*xcuserdata*" \! -path "*.git" -newer $plist)" ]; then

2

คุณอาจต้องการทำสิ่งนี้เฉพาะเมื่อคุณเก็บถาวร (และอัปโหลดไปยัง TF เป็นต้น) มิฉะนั้นหมายเลขเวอร์ชันของคุณอาจเร็วขึ้นจริงๆ ..

ในโครงร่าง (Product / Edit Scheme / Archive / Pre-Actions) คุณสามารถเพิ่มสคริปต์ที่จะดำเนินการเมื่อคุณเก็บถาวรเท่านั้น

นอกจากนี้คุณอาจต้องการรีเซ็ตหมายเลขบิวด์ทุกครั้งที่คุณเพิ่มเวอร์ชันแอป

สิ่งสุดท้ายหากคุณใช้ไฟล์เก็บถาวรแทนคุณสามารถปิดใช้งานได้อย่างปลอดภัย:

# if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
...
# else
    # echo "Not incrementing build number as source files have not changed"
# fi

เนื่องจากหมายเลขบิลด์จะเพิ่มขึ้นก็ต่อเมื่อคุณเก็บ ...

แก้ไข: แก้ไขสิ่งที่ฉันพูดการดำเนินการล่วงหน้าในที่เก็บถาวรเกิดขึ้นหลังจากสร้าง (แต่ก่อนที่จะเก็บถาวร) ดังนั้นหมายเลขบิลด์จะเพิ่มขึ้นสำหรับการจัดเก็บครั้งต่อไป ... แต่คุณสามารถสร้างรูปแบบใหม่และเพิ่มการกระทำนี้ในการสร้าง (ก่อน - การดำเนินการ) ของโครงการใหม่นี้ และใช้โครงร่างนี้เมื่อคุณต้องการสร้างงานสร้างใหม่


1
ใช่มันกำลังขึ้นอย่างรวดเร็ว (ในขณะนี้ 5500+) แต่นั่นไม่ใช่ปัญหาสำหรับฉัน มันเป็นเพียงตัวเลข มันน่าสนใจแค่ว่า Cmd-B / Cmd-R โดนกี่ครั้งก่อนที่อะไรจะได้ผลแม้ว่า ...
trojanfoe

2

ฉันใช้การแก้ไข SVN ล่าสุดสำหรับหมายเลขบิลด์ หากคุณเปลี่ยน Info.plist ในไดเร็กทอรี build คุณจะไม่มีผลกับแหล่งที่มา Info.plist:

# use the last SVN revision as the build number:
Info_plist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Info.plist"
defaults write "${Info_plist}" CFBundleVersion `svn stat -u | awk '/'"Status against revision:"'/ {print $4}'`

2

ฉันรู้สึกเหมือนได้พบเผ่าของฉัน เผ่าฉันหวังว่าคุณจะสนุกกับ VersionX

ทศวรรษที่ผ่านมาในขณะที่ทำงานบนพื้นที่ทำงานที่มีโครงการ Xcode มากกว่า 25 โครงการฉันได้ใช้โอกาสนี้ในการทำให้เวอร์ชันอัตโนมัติและสร้างการอัปเดตสตริงในระดับที่อาจดูไร้สาระหากคุณดูแลเพียงโครงการหรือสองโครงการพร้อมการอัปเดตเป็นครั้งคราว

VersionX:

  • ตระหนักถึงประเภทการสร้าง (Release / Debug)
  • รวบรวมข้อมูลในเวลาสร้างจากที่เก็บ (รวมการสนับสนุน git แต่สามารถปรับแต่งสำหรับ hg, svn หรืออะไรก็ได้ที่คุณใช้)
  • มีไว้สำหรับสตริงเวอร์ชันการตลาดแฟนซีที่ปรับแต่งได้ง่าย (ซึ่งมีรูปแบบมากกว่าก่อนที่ App Store จะกำหนดให้มีการประชุม) เพื่อให้คุณสามารถเพิ่มสตริงโดยอัตโนมัติซึ่งรวมสัญลักษณ์สำหรับ "เบต้า" โดยใช้รูปแบบแท็ก git
  • รวมถึงคลาสที่เติมด้วยตัวแปรอินสแตนซ์ที่มีข้อมูลเวอร์ชันและคอมมิต สิ่งนี้มีประโยชน์สำหรับการใส่ข้อมูลเกี่ยวกับพาเนลและการสร้างสตริงการบันทึกรายงานข้อขัดข้องหรือรายงานข้อบกพร่องทางอีเมลของผู้ใช้ที่มีข้อมูลที่เติมไว้ล่วงหน้า

มันสนุกมากที่จะทำ ฉันได้เรียนรู้เรือบรรทุกเกี่ยวกับระบบสร้าง Xcode

นี่คือตัวอย่างประเภทของสตริงเวอร์ชันแฟนซีและสตริงที่สร้างเวอร์ชันที่ VersionX สามารถสร้างได้โดยอัตโนมัติ

VersionX 1.0.1 β7 (c5959a3“ สะอาด”)

เวอร์ชันทางการตลาด: VersionX 1.0.1 β7 "1.0.1 มาจากแท็กสำหรับคอมมิตในขณะที่" เบต้า 7 "สร้างขึ้นโดยอัตโนมัติโดยจำนวนคอมมิตหรือจำนวนบิลด์ (ตัวอย่าง)

เวอร์ชันบิวด์: (c5959a3“ Clean”) แสดงแฮชคอมมิตแบบสั้นและแจ้งให้คุณทราบว่าไดเร็กทอรีบิลด์มีการเปลี่ยนแปลงที่ไม่ได้กำหนดเป็นศูนย์

VersionX (ซอร์สที่ GitHub) - ระบบพิสดารสำหรับการเพิ่มเวอร์ชันโดยอัตโนมัติและสร้างสตริงในโปรเจ็กต์ Xcode

เอกสาร VersionX


1

คุณอาจต้องการตรวจสอบเครื่องมือใหม่ที่ฉันพัฒนาชื่อว่า Xcodebump สามารถจัดการการอัปเดตทั้ง CFBundleShortVersionString และ CFBundleVersion ในขั้นตอนสุดท้ายมันจะเช็คอินเพื่อคอมไพล์และแท็กคอมมิตเพื่อจับคู่กับค่า CFBundle เหล่านั้น

โครงการ Xcodebumpตั้งอยู่ที่นี่:

https://github.com/markeissler/Xcodebump


1

ฉันอัปเดตbuild numberตามวิธีการต่อไปนี้

$INFO_FILEคือพา ธ ของไฟล์ plist และ$build_numberเป็นเลขที่สร้างใหม่สำหรับอาคารนี้.

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_number" "${INFO_FILE}"

โดยทั่วไปของฉัน$build_numberประกอบด้วยmajorและminorชิ้นส่วน minorมาจากข้อมูลโครงการ ดังนั้นฉันจึงอธิบายวิธีสร้างชิ้นmajorส่วน

## Composed by `major` and `minor`. 
## `minor` is parsed from project information. It's another story.
## Examples: `21.1`, or `21.1.3`
build_number="${major_number}.${minor_number}"

ฉันมี 2 กลยุทธ์ในการตัดสินใจ $build_number .

กลยุทธ์แรก

กลยุทธ์นี้จะใช้git tagการนับในการตัดสินใจของmajor build numberหากมี53แท็กของโปรเจ็กต์จะส่งคืน53โดยทำตามเชลล์สคริปต์

โดยทั่วไปจะเพิ่มขึ้น และจะบังคับให้นักพัฒนาต้องใส่ git tag ก่อนที่จะเผยแพร่

major_number=$(git tag -l | wc -l | grep -oE "\d+")

กลยุทธ์ที่สอง

ปล่อยให้ระบบJenkins CI ตัดสินใจในmajorส่วนนี้ BUILD_NUMBERมันมีตัวแปรสภาพแวดล้อม เพิ่มขึ้นโดยอัตโนมัติเมื่อสร้างบนระบบ CI ข้อมูลนี้มีประโยชน์ในการติดตามประวัติโครงการบนระบบ CI

major_number=${BUILD_NUMBER}

1

นี่คือเวอร์ชันที่อัปเดต ใช้งานได้กับ Xcode 9.3.1, iOS 11

คลิกที่ 'สร้างเฟส' จากเป้าหมายแอปพลิเคชันของคุณคลิกไอคอน + เพื่อเพิ่มสคริปต์การรันใหม่และวางโค้ดนี้ในช่อง

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

ไปที่ไฟล์ Info.plist และตั้งค่า "Bundle version" เป็น 1 และ "Bundle versions string, short" เป็น 1

สร้างโปรเจ็กต์ด้วย Info.plist ในมุมมองและคุณควรเห็นการเปลี่ยนแปลงเวอร์ชัน Bundle (หมายเลขบิลด์)

  • โปรดทราบว่าใน Xcode 9.3.1 คุณจะไม่สามารถเห็นการเปลี่ยนแปลงเหล่านี้ได้จากแท็บทั่วไป แต่จะเห็นการเปลี่ยนแปลงเมื่อคุณเก็บงานบิลด์และใน Info.plist

0

นี่คือทางออกของฉัน ถ้าคุณเป็นเหมือนฉัน: เป็นมิตรกับเทอร์มินัลเช่นทับทิมเช่นการกำหนดเวอร์ชันเชิงความหมายลองสิ่งนี้

สร้างไฟล์Rakefileที่มีสิ่งนี้:

require "xcodeproj"
require "versionomy"

XCODEPROJECT = "MyProject.xcodeproj"
INFOPLISTFILE = "MyProject/MyProject-Info.plist"

$UPDATES = [:major,:minor,:tiny]
$UPDATES.each { |part|
  desc "increment #{part} part of version"
  task "increment:#{part}" do |task|
    version=`/usr/libexec/Plistbuddy -c "Print CFBundleVersion" #{INFOPLISTFILE}`.chomp
    version=Versionomy.parse(version)
    version=version.bump(part)

    # I use the same string for CFBundleVersion and CFBundleShortVersionString for now
    `/usr/libexec/PlistBuddy -c "Set :CFBundleVersion #{version}" #{INFOPLISTFILE}`
    `/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString #{version}" #{INFOPLISTFILE}`
    print "version upgraded to #{version}\n"
  end
}

เตรียม: gem install xcodeproj versionomy

เรียกใช้: rake increment:majorหรือrake increment:minorหรือrake increment:tinyเมื่อใดก็ตามที่คุณต้องการ


0

ฉันคิดว่าการใช้Automating Version และ Build Numbers โดยใช้ agvtoolนั้นน่าจะสะดวกที่สุด

ลองสิ่งนี้:

  1. กำหนดค่าตามที่อธิบายไว้ในเอกสารของ Apple ที่ลิงก์ด้านบน
  2. เพิ่มสคริปต์เป็น Pre-action ไปยัง Project -> Edit Scheme ... -> Archive (หรืออื่น ๆ หากคุณต้องการ)
  3. ตั้งค่า: ให้การตั้งค่าการสร้างจาก <your_app_target>

สคริปต์ (บรรทัดแรกเป็นทางเลือก):

exec > ${PROJECT_DIR}/prebuild.log 2>&1
cd ${PROJECT_DIR}
xcrun agvtool next-version -all
cd -

0

ลองทำตามวิธีของ Apple มันจะเพิ่มจำนวนการสร้างหลังจากแต่ละครั้งที่สร้างสำเร็จ

ฉันจะแนะนำคุณผ่าน 5 ภาพเพียงแค่ผ่านมันไป

  1. เลือก 'แก้ไขโครงการ ... ' จากเมนูแบบเลื่อนลงเมื่อคุณเลือกชื่อโครงการของคุณที่อยู่ทางด้านขวาของปุ่ม Stop_build_button ตรวจสอบขั้นตอนแรก

  2. จากเมนูด้านซ้ายขยายตัวเลือก "สร้าง" และเลือก "หลังการกระทำ" ตรวจสอบขั้นตอนที่สอง

  3. ที่นี่คุณสามารถเพิ่มรหัสที่คุณต้องการ (สคริปต์) ที่คุณต้องการดำเนินการหลังจากสร้างโปรแกรมสำเร็จแล้ว เป็นสถานที่ที่เราต้องเพิ่มโค้ดเล็กน้อยเพื่อให้ระบบอัตโนมัติของเราทำงานได้อย่างสมบูรณ์ >> 1. เลือกปุ่ม 'เพิ่ม (+)' จากมุมด้านซ้ายเพื่อเพิ่มไฟล์สคริปต์ใหม่ >> 2. จากเมนูแบบเลื่อนลงให้เลือก 'New Run Script Action' ตรวจสอบขั้นตอนที่สาม

  4. มี 3 ฟิลด์ >> 1. เชลล์ถูกกำหนดให้คุณแล้ว >> 2. ตอนนี้สำหรับ 'ให้คุณสร้างการตั้งค่าจาก' เลือกชื่อโครงการของคุณ >> 3 มีช่องขนาดใหญ่ในการเพิ่มสคริปต์ของคุณเพียงแค่คัดลอกและวางโค้ดนี้ที่นั่น: ตรวจสอบขั้นตอนที่สี่

    PLIST = "$ {PROJECT_DIR} / $ {INFOPLIST_FILE}" PLB = / usr / libexec / PlistBuddy LAST_NUMBER = $ ($ PLB -c "พิมพ์ CFBundleVersion" "$ PLIST") NEW_VERSION = $ ((LAST_NUMBER + 1)) $ PLB -c "ชุด: CFBundleVersion $ NEW_VERSION" "$ PLIST"

  5. หลังจากเสร็จสิ้นขั้นตอนที่ 4 เพียงเลือก 'ปิด' เพื่อปิดหน้าต่างและเราต้องทำขั้นตอนสุดท้ายไปที่ไฟล์ 'plist.info' ของคุณในเมนูไฟล์โครงการและตรวจสอบให้แน่ใจว่าคีย์ 'Bundle Version' ในส่วน 'Key' ส่วนใหญ่มี การตรวจสอบค่าตัวเลขขั้นตอนที่ห้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.