1. ホーム
  2. ios

[解決済み] Xcodeにおけるバージョンとビルドの比較

2022-03-14 02:14:41

質問

私はXcode 3で開発したアプリを持っていて、最近Xcode 4で編集を始めました。ターゲットサマリーの中に、iOSアプリケーションターゲットフォームがあり、識別子、バージョン、ビルド、デバイス、デプロイメントターゲットのフィールドがあります。バージョンフィールドは空白で、ビルドフィールドは3.4.0(これは私がまだXcode 3で編集していたときのアプリのバージョンと一致します)です。

私の質問は

  1. バージョンとビルドのフィールドの違いは何ですか?

  2. Xcode 4にアップグレードしたら、なぜバージョン欄が空白になったのですか?

解決方法は?

Appleは、フィールドを並べ替えたり、再利用したりしています。

今後、Application Target の Info タブを見ると、"Bundle versions string, short" を Version (e.g., 3.4.0) として、"Bundle version" を Build (e.g., 500 or 1A500) として使用すべきです。もし両方が表示されていない場合は、追加することができます。これらは、[サマリー]タブの適切なバージョンとビルドのテキストボックスにマッピングされます; これらは同じ値です。

情報]タブを表示しているときに、右クリックで 生のキー/値を表示する となっており、実際の名称は CFBundleShortVersionString (バージョン)と CFBundleVersion (ビルド)となります。

Versionは通常、Xcode 3であなたが使っていたと思われる使い方をします。VersionとBuildの違いについてどのようなレベルで質問されているのか分からないので、哲学的にお答えします。

いろいろな方式がありますが、ポピュラーなのは

{メジャーバージョン}.{マイナーバージョン}.{リビジョン}。

  • メジャーバージョン - 主な変更点・再設計・機能性 変更点
  • マイナーバージョン - 軽微な改良、機能追加
  • リビジョン - バグフィックス用のパッチ番号

次に、Buildは、リリースまたは製品寿命全体のビルドの合計数を示すために別途使用されます。

多くの開発者はBuild番号を0から始め、ビルドするたびに1ずつ増やしていき、永遠に増え続けます。私のプロジェクトでは、ビルドするたびにビルド番号を自動的に増加させるスクリプトを用意しています。その方法は以下をご覧ください。

  • リリース1.0.0はビルド542かもしれません。リリース1.0.0はビルド542かもしれません。 1.0.0のリリースです。
  • リリース1.0.1はビルド578かもしれません。
  • リリース1.1.0はビルド694かもしれません。
  • リリース2.0.0はビルド949かもしれません。

Appleを含む他のデベロッパーは、メジャーバージョン+マイナーバージョン+リリースのビルド数で構成されるBuild番号を持っています。これらは、マーケティングに使用される値とは対照的に、実際のソフトウェアのバージョン番号です。

にアクセスすると Xcode メニュー > Xcodeについて をクリックすると、VersionとBuildの数字が表示されます。もし 詳細情報... ボタンをクリックすると、さまざまなバージョンを見ることができます。そのため もっと詳しく... ボタンは Xcode 5 で削除されたため、この情報は ソフトウェア > デベロッパー セクションの システム情報 アプリを起動することで利用できます。 アップル メニュー > このMacについて > システムレポート... .

例えば、Xcode 4.2(4C139)です。マーケティングバージョン4.2は、ビルドメジャーバージョン4、ビルドマイナーバージョンC、ビルド番号139です。次のリリース(おそらく4.3)は、おそらくビルドリリース4Dになり、ビルド番号は0から始まり、そこからインクリメントされます。

iPhone SimulatorのVersion/Build番号も、iPhoneやMacなどと同じように、同じようになっています。

  • 3.2: (7W367a)
  • 4.0: (8A400)
  • 4.1: (8B117)
  • 4.2: (8C134)
  • 4.3: (8H7)

更新情報 : リクエストにより、Xcodeでアプリをビルドするたびに実行され、ビルド番号を読み取り、それをインクリメントして、アプリのビルド番号に書き戻すスクリプトを作成する手順を以下に示します。 {App}-Info.plist ファイルを作成します。バージョン番号やビルド番号を Settings.bundle/Root*.plist ファイルを作成します。

これはハウツー記事から拡張されたものです こちら .

Xcode 4.2 - 5.0 では。

  1. Xcodeプロジェクトを読み込みます。
  2. 左側のペインで、階層構造の一番上にあるプロジェクトをクリックします。これにより、プロジェクト設定エディタがロードされます。
  3. 中央のウィンドウペインの左側、[アプリ]タブでアプリをクリックします。 タルゲット の見出しがあります。この設定は、各プロジェクトのターゲットごとに行う必要があります。
  4. を選択します。 ビルドフェーズ タブをクリックします。
    • Xcode 4では、右下にある ビルドフェーズの追加 ボタンをクリックし 実行スクリプトの追加 .
    • Xcode 5 では、以下を選択します。 エディタ メニュー > ビルドフェーズの追加 > 実行スクリプトのビルドフェーズの追加 .
  5. をドラッグ&ドロップして、新しい スクリプトの実行 フェーズの直前に移動させます。 バンドルリソースのコピー フェーズ(app-info.plist ファイルがアプリにバンドルされるとき)。
  6. 新しい スクリプトの実行 フェーズでは シェル : /bin/bash .
  7. ビルド番号が整数の場合、以下をコピーしてスクリプトエリアに貼り付けてください。

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

    Bdebeez さんのご指摘のように Apple汎用バージョン管理ツール ( agvtool ) も利用可能です。もし、代わりにこれを使いたいのであれば、最初に変更すべき点がいくつかあります。

    • を選択します。 ビルド設定 タブをクリックします。
    • の下にある バージョン管理 セクションで 現在のプロジェクトのバージョン には、使用したい初期ビルド番号を指定してください。 1 .
    • に戻る。 ビルドフェーズ タブで、ドラッグアンドドロップで 実行スクリプト フェーズの後に バンドルリソースのコピー フェーズで、ビルド番号を含むソースファイルのビルドとアップデートの両方を試みる際の競合状態を回避するためです。

    なお agvtool メソッドを使用しても、エラーなしでビルドが失敗またはキャンセルされることがあります。このため、私は agvtool をこのスクリプトで使用します。

    とはいえ、あなたの スクリプトの実行 のフェーズでは、以下のスクリプトを使用することができます。

    "${DEVELOPER_BIN_DIR}/agvtool" next-version -all
    
    

    next-version 引数は、ビルド番号をインクリメントします ( bump は同じものの別名でもあります)、そして -all 更新 Info.plist を新しいビルド番号で表示します。

  8. また、バージョンとビルドを表示するSettings bundleがある場合は、スクリプトの最後に以下を追加することで、バージョンとビルドを更新することができます。 PreferenceSpecifiers の値は、あなたの設定に合うように変更してください。 PreferenceSpecifiers:2 の下にあるインデックス2の項目を見ることを意味します。 PreferenceSpecifiers つまり、0基準のインデックスでは、配列の3番目の環境設定となります。

    productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    
    

    もし、あなたが agvtool を読み込むのではなく Info.plist を直接入力する代わりに、スクリプトに以下を追加してください。

    buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse)
    productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1)
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    
    
  9. また、iPad & iPhone用のユニバーサルアプリであれば、iPhoneのファイルに対する設定も可能です。

    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist    
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist