(Các) số phiên bản / phiên bản ứng dụng iOS nào PHẢI được tăng lên khi phát hành App Store?


107

Các trường phiên bản / bản dựng cho ứng dụng iOS bao gồm:

  • "Phiên bản" CFBundleShortVersionString (Chuỗi - iOS, OS X) chỉ định số phiên bản phát hành của gói, xác định phiên bản đã phát hành của ứng dụng. Số phiên bản phát hành là một chuỗi bao gồm ba số nguyên được phân tách bằng dấu chấm.

  • "Build" CFBundleVersion (String - iOS, OS X) chỉ định số phiên bản xây dựng của gói, xác định số lần lặp lại (đã phát hành hoặc chưa phát hành) của gói. Số phiên bản xây dựng phải là một chuỗi bao gồm ba số nguyên không âm, được phân tách bằng dấu chấm với số nguyên đầu tiên lớn hơn 0. Chuỗi chỉ nên chứa các ký tự số (0-9) và dấu chấm (.). Các số không ở đầu được cắt bớt từ mỗi số nguyên và sẽ bị bỏ qua (nghĩa là 1.02.3 tương đương với 1.2.3). Khóa này không thể bản địa hóa.

  • "Số phiên bản kết nối iTunes" : số phiên bản bạn chỉ định khi tạo phiên bản mới của ứng dụng trên iTunes Connect.

Câu hỏi của tôi là:

Số phiên bản / phiên bản nào được yêu cầu tăng lên khi một phiên bản mới của ứng dụng được tải lên iTunes Connect và / hoặc được phát hành lên App Store?

"Phiên bản" CFBundleShortVersionStringhoặc "bản dựng" có thể CFBundleVersiongiữ nguyên giữa các bản cập nhật ứng dụng không?

Điểm bổ sung cho các nguồn Apple hoặc thông báo lỗi chính xác iTunesConnect hiển thị khi tải lên phiên bản / số bản dựng không hợp lệ.


Ghi chú trên Android / Google Play:

Cuộc thảo luận đặt ra câu hỏi này là "phiên bản" công khai của ứng dụng Android trong Cửa hàng Google Play không cần phải tăng lên và không có cách nào được xác thực. Có android:versionNamethể giữ nguyên giữa các lần phát hành, nâng cấp, hạ cấp hoặc là bất kỳ chuỗi ngẫu nhiên nào chứ không phải là một cái gì đó có vẻ là "số phiên bản" hợp lệ.

android:versionName - Giá trị chuỗi đại diện cho phiên bản phát hành của mã ứng dụng, vì nó sẽ được hiển thị cho người dùng.

Giá trị là một chuỗi để bạn có thể mô tả phiên bản ứng dụng dưới dạng <major>.<minor>.<point>chuỗi hoặc dưới dạng bất kỳ loại mã định danh phiên bản tương đối hoặc tuyệt đối nào khác .

Sự khác biệt giữa versionName và versionNumber trong Android

Trong khi số android:versionCodenày được thực thi là một số nguyên tăng dần khi phát hành.


Tài liệu của Apple

Như đã lưu ý trong câu trả lời mới được chấp nhận , Apple gần đây đã xuất bản một Ghi chú kỹ thuật nêu chi tiết về phiên bản và lược đồ số bản dựng của họ:

Ghi chú kỹ thuật của Apple TN2420 - Số phiên bản và Số bản dựng


Câu trả lời chi tiết kèm theo ảnh chụp màn hình: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

Câu trả lời:


115

Ghi chú kỹ thuật của Apple TN2420, Số phiên bản và Số bản dựng

Tóm lược:

  • Cặp ( Version, Build number) phải là duy nhất.
    • Chuỗi hợp lệ: (1.0.1, 12) -> (1.0.1, 13) -> (1.0.2, 13) -> (1.0.2, 14) ...
  • Version( CFBundleShortVersionString ) phải theo thứ tự tuần tự tăng dần.
  • Build number( CFBundleVersion ) phải theo thứ tự tuần tự tăng dần.

Danh sách kiểm tra số phiên bản và số bản dựng

Dưới đây là một số điều bạn có thể kiểm tra khi gửi bản dựng mới cho App Store. Đảm bảo rằng bạn đã đặt Số phiên bản và Số bản dựng đúng cách sẽ giúp bạn tránh việc Ứng dụng của bạn tự động bị từ chối do cấu hình chúng không đúng cách.

  1. Đối với mỗi phiên bản mới của Ứng dụng, bạn cần phải tạo một Số phiên bản mới. Số này phải là một giá trị lớn hơn Số phiên bản cuối cùng mà bạn đã sử dụng. Mặc dù bạn có thể cung cấp nhiều bản dựng cho bất kỳ bản phát hành cụ thể nào của Ứng dụng, nhưng bạn chỉ cần sử dụng một Số phiên bản mới cho mỗi bản phát hành mới của Ứng dụng.
  2. Bạn không thể sử dụng lại Số phiên bản.
  3. Đối với mỗi bản dựng mới mà bạn gửi, bạn sẽ cần phải phát minh Số bản dựng mới có giá trị lớn hơn Số bản dựng cuối cùng bạn đã sử dụng (cho cùng phiên bản đó).
  4. Bạn có thể sử dụng lại Số bản dựng trong các đợt phát hành khác nhau, nhưng bạn không thể sử dụng lại Số bản dựng trong cùng một đợt phát hành. Đối với ứng dụng macOS, bạn không thể sử dụng lại số bản dựng trong bất kỳ đợt phát hành nào.

Dựa trên danh sách kiểm tra, (Version, Build Number)trình tự sau đây cũng hợp lệ.

  • Trường hợp: tái sử dụng Build Numbertrong các chuyến tàu phát hành khác nhau. (LƯU Ý: KHÔNG ứng dụng macOS)

    (1.0.0, 1) -> (1.0.0, 2) -> ... -> (1.0.0, 11) -> ( 1.0.1 , 1 ) -> (1.0.1, 2)


Tôi bối rối. Một trong những điều kiện là "Bạn không thể sử dụng lại Số phiên bản", nhưng trong ví dụ cuối cùng, số phiên bản vẫn giữ nguyên trong khi số bản dựng đang tăng lên. Tôi có đang hiểu sai điều gì đó không?
Emil

@Emil, tôi nghĩ rằng không thể sử dụng lại cặp (Phiên bản, Số bản dựng) đó.
AechoLiu

6
@EmilParikh Số phiên bản có thể được tải lên Apple nhiều lần trước khi phát hành , mỗi số có một số Phiên bản duy nhất. Nhưng một khi nó đã được phát hành, bạn không thể sử dụng lại số Phiên bản đó.
pkamb

1
TN2420 cho biết "Số phiên bản và số bản dựng có thể có tối đa ba thành phần được phân tách bằng dấu chấm " và sau đó cung cấp ví dụ bất hợp pháp sau 1.10000.1.5 . Tuy nhiên, có vẻ như nhiều ứng dụng, bao gồm cả chrome sử dụng số phiên bản chứa 4 thành phần (ví dụ: 68.0.3440.83 ). Tôi đoán điều này có thể được giải thích do trang TN2420 đề cập đến " Quan trọng: Tài liệu này không còn được cập nhật " . Tuy nhiên, tôi không thể tìm thấy tài liệu cập nhật xác định các quy tắc mới. Còn ai nhầm lẫn nữa không?
catanman

@catanman Tôi thích Phiên bản Ngữ nghĩa này . Hãy để phiên bản được sáng tác với (major, minor, patch)cách thức. Và tôi đã sử dụng 4 thành phần trước đây, nhưng App store không chấp nhận định dạng đó với 4 thành phần.
AechoLiu

38

Các CFBundleShortVersionStringphải phù hợp với số phiên bản bạn cung cấp cho iTunes Connect. Nó cũng là số phiên bản xuất hiện khi người dùng nhìn vào Ứng dụng của bạn trong App Store.

Số phiên bản được hiển thị trong cửa hàng và phiên bản đó phải khớp với số phiên bản bạn nhập sau trong iTunes Connect.

Nguồn

Các CFBundleVersionkhông được hiển thị trong App Store, nhưng được sử dụng bởi iTunes để xác định khi App của bạn đã được cập nhật.

Nếu bạn cập nhật chuỗi xây dựng, như được mô tả trong “Đặt số phiên bản và chuỗi xây dựng”, iTunes nhận ra rằng chuỗi xây dựng đã thay đổi và đồng bộ hóa đúng cách Gói ứng dụng iOS mới để kiểm tra thiết bị.

Nguồn

Trả lời câu hỏi của bạn cụ thể hơn ...

Số phiên bản / phiên bản nào được yêu cầu tăng lên khi một phiên bản mới của ứng dụng được tải lên cửa hàng ứng dụng?

Cả hai. Một được hiển thị trong App Store, cái còn lại được iTunes sử dụng để cập nhật Ứng dụng.

CFBundleShortVersionString hoặc CFBundleVersion có thể giữ nguyên giữa các bản cập nhật ứng dụng không?

Không. (Câu hỏi meta, trường hợp sử dụng sẽ là gì ở đây? Nếu bạn đã chỉnh sửa tải trọng theo bất kỳ cách nào, bản dựng sẽ khác và người dùng sẽ muốn biết về nó). Nếu thử, bạn sẽ thấy các thông báo lỗi như bên dưới:

Thông báo lỗi

Hay chúng được so sánh với số tương ứng trước đó để đảm bảo rằng một số lớn hơn được tải lên cùng với phiên bản mới của ứng dụng?

Đúng. Sử dụng tiêu chuẩn semver.org .

Các số CFBundleShortVersionString và CFBundleVersion có so sánh với nhau theo cách nào không?

Không.


2
Đúng vậy, tôi biết hai số được sử dụng như thế nào. Câu hỏi đặt ra là: cả hai đều được yêu cầu tăng lên khi phát hành phiên bản mới của ứng dụng?
pkamb

2
Vâng, nếu bạn cố gắng đẩy một App vào App Store mà không cần cập nhật cả hai, bạn sẽ thấy một thông báo lỗi ví dụ stackoverflow.com/questions/19367893/...
Andy

Cảm ơn, chỉnh sửa tuyệt vời. Đặc biệt là đối với liên kết đó. Trình xác thực của người tổ chức đang hiển thị lỗi "phải chứa phiên bản cao hơn" cho cả CFBundleVersion và CFBundleShortVersionString.
pkamb

1
+1 cho liên kết SemVer ... Với số phiên bản MAJOR.MINOR.PATCH, tăng phiên bản: MAJOR khi bạn thực hiện các thay đổi API không tương thích, phiên bản MINOR khi bạn thêm chức năng theo cách tương thích ngược và phiên bản PATCH khi bạn thực hiện ngược -sửa lỗi không tương thích.
jeet.chanchawat,

Về điều này: trường hợp sử dụng sẽ là gì ở đây? Nếu bạn đã chỉnh sửa tải trọng theo bất kỳ cách nào, bản dựng sẽ khác và người dùng sẽ muốn biết về nó . Trường hợp sử dụng của tôi là ứng dụng của tôi đã được Apple xem xét thành công, nhưng chưa bao giờ được phát hành trước đó trong App Store. Tôi đã tìm thấy một lỗi và tôi muốn sửa lỗi đó - mà không cần thay đổi CFBundleShortVersionString. Điều này có khả thi không? Tôi muốn từ chối ứng dụng của riêng mình.
kiểm tra

31

CFBundleShortVersionString là "tên" công khai của phiên bản (ví dụ: "2.5" hoặc "3.8.1"). Bạn phải tăng nó ở mỗi lần phát hành .

CFBundleVersion là số bản dựng riêng . Nó không được nhìn thấy trên AppStore. Bạn phải tăng nó ở mỗi lần tải lên . Có nghĩa là nếu bạn từ chối một tệp nhị phân trước khi nó trực tuyến và bạn muốn tải lên một tệp nhị phân mới, nó sẽ có cùng một CFBundleShortVersionString nhưng phải có CFBundleVersion cao hơn (ví dụ: public "2.5", private "2.5", và sau đó từ chối nhị phân và tải lên lại "2.5.1" riêng tư)

Chỉnh sửa vào ngày 16 tháng 11 năm 2016:

/ ! \ Thuộc tính CFBundleVersion cũng được sử dụng (cùng với CFBundleName ) trong User-Agenttiêu đề do NSURLConnection gửi trong mã của bạn.

Ví dụ: nếu CFBundleNameMyAppCFBundleVersion là 2,21, thì bất kỳ truy vấn HTTP có lập trình nào được gửi trực tiếp bằng mã của bạn bằng NSURLConnection sẽ nhúng tiêu đề:

User-Agent: MyApp/2.21 CFNetwork/... Darwin/...

(Điều này không áp dụng cho các yêu cầu do UIWebView đưa ra tự động).


2
Sự khác biệt rõ ràng giữa các yêu cầu đối với tải lên / phát hành.
pkamb

@gabriel, tôi đã cố gắng đặt số bản dựng thành XX-rc2 nhưng trình xác thực của Người tổ chức không cho phép tôi đặt bất kỳ thứ gì khác với XYZ trong đó X, Y và Z là số nguyên: S. Sẽ thật tuyệt nếu có số bản dựng -rc2, bạn đã bao giờ có thể gửi một bản phát hành với nó chưa?
Néstor

1
@nestor Bạn nói đúng, tôi đã sai. Chỉ số được phép. Hãy để tôi chỉnh sửa câu trả lời của tôi.
Gabriel

@gabriel, tôi sử dụng một kịch bản để phân tích X.X-rc2đến X.X.2, đối với hệ thống CI để tạo ra buildNumbercho tải lên iTunesConnect.
AechoLiu

5

CFBundleVersion và CFBundleShortVersionString phải lớn hơn số phiên bản cuối cùng của ứng dụng. Đó là một thực hành tốt để giữ chúng giống nhau. Bạn sẽ tìm thấy chúng trong -info.plist của bạn.

Khi bạn cố gắng xác thực ứng dụng trong trình tổ chức, nó sẽ xuất hiện lỗi nếu một trong số chúng chưa được tăng dần. Đã xảy ra với tôi đêm qua.


Tôi đã đề cập đến cả hai chìa khóa đó trong câu hỏi của mình. Câu trả lời của bạn ở đây là cả hai giá trị đó phải được tăng lên? Bạn có thể hỗ trợ tốt hơn cho câu trả lời của bạn?
pkamb

Có cả hai cần được tăng lên. Đêm qua khi tôi cố gắng gửi trước khi tăng chúng, nó đã phàn nàn về cả hai phím.
xoail

Cảm ơn thông tin bổ sung. Bạn nên chỉnh sửa câu trả lời của mình để thêm kinh nghiệm khi tải lên một công trình.
pkamb

6
"Đó là một thực tiễn tốt để giữ chúng giống nhau" - điều này không nhất thiết đúng. Nếu bạn có người thử nghiệm đang làm việc trên Ứng dụng của mình, bạn có thể muốn tăng số bản dựng của mình khi các thay đổi được áp dụng, nhưng vẫn giữ nguyên số phiên bản của bạn. Ví dụ: bằng cách sử dụng tích hợp liên tục, bạn có thể yêu cầu nó cập nhật số bản dựng cho bạn trước khi triển khai cho người thử nghiệm.
Andy

@Andy bạn nói đúng, có lý. Cảm ơn đã chỉ ra trường hợp sử dụng. Tôi chỉ nghĩ về một môi trường nhà phát triển / thử nghiệm duy nhất.
xoail

5

Cả hai CFBundleVersionCFBundleShortVersionString PHẢI được tăng lên khi phát hành phiên bản mới cho App Store.

Ngoài ra, một trong các chuỗi phải khớp với phiên bản được chỉ định trong iTunes Connect.

Lỗi Xcode Organizer Validator: phải tăng số phiên bản.

Câu hỏi này bao gồm ảnh chụp màn hình ở trên về Trình xác thực của Công cụ tổ chức Xcode từ chối xác thực ứng dụng khi CFBundleVersionCFBundleShortVersionStringchưa được tăng lên.

  • Gói này không hợp lệ. Giá trị cho khóa CFBundleVersion[1.0] trong tệp Info.plist phải chứa phiên bản cao hơn phiên bản đã tải lên trước đó [1.134].

  • Gói này không hợp lệ. Giá trị cho khóa CFBundleShortVersionString[1.0] trong tệp Info.plist phải chứa phiên bản cao hơn phiên bản đã tải lên trước đó [1.134].

Trình xác thực cũng đưa ra lỗi chứng minh rằng một trong các chuỗi phải khớp với phiên bản của ứng dụng được tạo trên iTunes Connect.

  • Phiên bản không phù hợp. Cả CFBundleVersion ['1.0'] và CFBundleShortVersionString ['1.0'] trong Info.plist đều không khớp với phiên bản của bộ ứng dụng trong iTunes Connect ['1.4'].

2

Ghi chú kỹ thuật hiện tại của Apple TN2420, Số phiên bản và Số bản dựng cho biết (in đậm của tôi):

  1. Đối với ứng dụng iOS, bạn có thể sử dụng lại số bản dựng trong các đợt phát hành khác nhau, nhưng bạn không thể sử dụng lại số bản dựng trong cùng đợt phát hành. Đối với ứng dụng macOS, bạn không thể sử dụng lại số bản dựng trong bất kỳ đợt phát hành nào .

Thật không may, điều này có nghĩa là bạn không thể sử dụng lại số bản dựng theo dõi số chuyến tàu phát hành trên iOS khi bạn đang cố gắng phát hành bản dựng tương tự trên Mac Catalyst.

Ví dụ: trong trường hợp của tôi, do một số sự cố trước đó, tôi đã phát hành 1.0.2 (4) dưới dạng ứng dụng Mac Catalyst tương ứng với 1.0.2 (1) trên iOS. Hiện tại khi cố gắng phát hành 1.0.3 (1) trên cả hai, ứng dụng không xác minh được trên MacOS do số bản dựng, trong khi vượt qua xác minh trên iOS.

Tôi đoán bây giờ tôi đang phát hành cùng một ứng dụng trên cả iOS và MacOS thường xuyên, tôi sẽ áp dụng các số bản dựng tương ứng với ngày, như 20200111 và tăng dần bằng dấu thập phân nếu tôi cần thay đổi số bản dựng trong một bản phát hành nhất định.


1

Bạn cần phải tăng cả hai .

Khi tải lên phiên bản mới, bạn sẽ cần tạo một phiên bản mới trên iTunes Connect, phiên bản này tự động sẽ cao hơn các phiên bản trước. Phiên bản này trên iTunes Connect sẽ mong đợi một số nhị phân với cùng số phiên bản, do đó CFBundleShortVersionStringcần được tăng lên.

Nếu bạn cập nhật phiên bản nhưng quên tăng CFBundleVersion, bạn sẽ gặp lỗi trong quá trình tải lên. Xem câu trả lời và ảnh chụp màn hình của pkamb.

Để biết chi tiết về CFBundleShortVersionStringCFBundleVersion, vui lòng xem: https://stackoverflow.com/a/31921249/936957


1

Tôi có thể xác nhận rằng, tôi vừa thử theo cả hai cách, rằng một chuỗi phiên bản và số bản dựng như ...

1.0.0 (1)
1.0.1 (1)
1.0.2 (1)

... sẽ được chấp nhận cho các ứng dụng iOS, nhưng đối với các ứng dụng Mac (Catalyst), nó trả về lỗi này:

LỖI ITMS-90061: "Gói này không hợp lệ. Giá trị cho khóa CFBundleVersion [1] trong tệp Info.plist phải chứa phiên bản cao hơn phiên bản đã tải lên trước đó [2]."

Phiên bản Mac và số bản dựng sẽ cần phải giống như ...

1.0.0 (1)
1.0.1 (2)
1.0.2 (3)

Đối với iOS, tôi đã sử dụng để nhập số bản dựng làm số phiên bản cộng với chữ số thứ tư, như ...

1.0.0 (1.0.0.1)
1.0.1 (1.0.1.1)
1.0.2 (1.0.2.1)

... nhưng điều đó cũng không được phép đối với các ứng dụng Mac. Khi tôi thử gửi ứng dụng Mac (Catalyst) đầu tiên của mình, Apple sẽ chỉ chấp nhận số bản dựng có ba chữ số trở xuống:

LỖI ITMS-9000: "Gói này không hợp lệ. Giá trị cho khóa CFBundleVersion [1.0.0.1] trong tệp Info.plist phải là một danh sách được phân tách bằng dấu chấm của tối đa ba số nguyên không âm."

Vì vậy, tôi đã thay đổi thành một số duy nhất tăng dần cho mọi bản dựng và tiếp tục tăng trên các số phiên bản.


Bạn có bất kỳ thông báo lỗi nào mà nó cung cấp cho bạn không? Vui lòng trích dẫn chúng nếu vậy!
pkamb

0

Tôi đang chuẩn bị phát hành một ứng dụng Mac App Store mới. Sử dụng định dạng CalVer của YEAR.release (build).

Tôi đã tải lên một vài xây dựng: 2020.0 (1), 2020.0 (2)vv Cuối cùng tôi gửi 2020.0 (8)cho App Store Review. Bài đánh giá đó đã được thông qua và ở trạng thái Đang chờ phát hành dành cho nhà phát triển .

Tôi muốn sửa chữa một vài điều trước khi phát hành, vì vậy tôi đã thêm một xây dựng mới để tàu phát hành cùng: 2020.0 (9).

Điều đó dẫn đến lỗi:

Lỗi hoạt động kết nối App Store

LỖI ITMS-90062 : "Gói này không hợp lệ. Giá trị cho khóa CFBundleShortVersionString[2020.0] trong tệp Info.plist phải chứa phiên bản cao hơn phiên bản đã được phê duyệt trước đó [2020.0]. Vui lòng tìm thêm thông tin CFBundleShortVersionStringtại https: // developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring "

điều này thật khó chịu vì 2020.0phiên bản của tôi chưa bao giờ thực sự được phát hành . Từ câu trả lời được chấp nhận của câu hỏi này, tôi có ấn tượng rằng cho đến khi ứng dụng có sẵn trên App Store, bạn có thể tiếp tục phát hành các bản dựng mới với cùng một phiên bản.

Giải pháp dường như là không thể cập nhật "chuyến tàu phát hành" (Phiên bản tương tự + Bản dựng mới) nếu trạng thái ứng dụng là Bản phát hành dành cho nhà phát triển đang chờ xử lý . Phát hành bản dựng hiện có của bạn và sau đó tăng phiên bản hoặc Hủy bản phát hành này trong App Store Connect để cho phép tải lên thêm cho đợt phát hành này.


-2

AFAIK, tôi không biết, bạn chỉ cần tăng số bản dựng CFBundleVersion. Không nhất thiết phải tăng chuỗi phiên bản ngắn, mặc dù bạn có thể nên tăng nó, vì nó cho người dùng biết rằng ứng dụng là mới. Tuy nhiên, Apple nói rằng việc đánh số phải tuân theo các quy ước lập phiên bản phần mềm truyền thống và iTunes Connect có thể phàn nàn nếu bạn cố tải lên lại một phiên bản đã có.

Truyện dài ngắn, nó có thể hiệu quả, nhưng có lẽ không.


Tìm kiếm câu trả lời có thẩm quyền về các phím phải được tăng dần. Nếu CFBundleShortVersionStringkhông bắt buộc phải tăng lên, phiên bản giao diện người dùng "giống nhau" sau đó có thể được tải lên App Store nhiều lần không?
pkamb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.