[解決済み] Xcodeにおけるバージョンとビルドの比較
質問
私はXcode 3で開発したアプリを持っていて、最近Xcode 4で編集を始めました。ターゲットサマリーの中に、iOSアプリケーションターゲットフォームがあり、識別子、バージョン、ビルド、デバイス、デプロイメントターゲットのフィールドがあります。バージョンフィールドは空白で、ビルドフィールドは3.4.0(これは私がまだXcode 3で編集していたときのアプリのバージョンと一致します)です。
私の質問は
-
バージョンとビルドのフィールドの違いは何ですか?
-
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 では。
- Xcodeプロジェクトを読み込みます。
- 左側のペインで、階層構造の一番上にあるプロジェクトをクリックします。これにより、プロジェクト設定エディタがロードされます。
- 中央のウィンドウペインの左側、[アプリ]タブでアプリをクリックします。 タルゲット の見出しがあります。この設定は、各プロジェクトのターゲットごとに行う必要があります。
- を選択します。 ビルドフェーズ タブをクリックします。
-
- Xcode 4では、右下にある ビルドフェーズの追加 ボタンをクリックし 実行スクリプトの追加 .
- Xcode 5 では、以下を選択します。 エディタ メニュー > ビルドフェーズの追加 > 実行スクリプトのビルドフェーズの追加 .
- をドラッグ&ドロップして、新しい スクリプトの実行 フェーズの直前に移動させます。 バンドルリソースのコピー フェーズ(app-info.plist ファイルがアプリにバンドルされるとき)。
-
新しい
スクリプトの実行
フェーズでは
シェル
:
/bin/bash
. -
ビルド番号が整数の場合、以下をコピーしてスクリプトエリアに貼り付けてください。
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
を新しいビルド番号で表示します。 -
また、バージョンとビルドを表示する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
-
また、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
関連
-
[解決済み] Xcodeエラー "Could not find Developer Disk Image" が発生する。
-
[解決済み] Xcode 4で「既存のフレームワークを追加」する方法は?
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] Xcode 6のバグ:Interface Builderファイル内の不明なクラス
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] iOSアプリを投稿するためにアーカイブしようとすると、プロビジョニング設定の競合エラーが発生する
-
[解決済み】App Transport Securityポリシーが安全な接続の使用を要求するため、リソースをロードできませんでした。
-
[解決済み】Xcode 10: この実行ファイルに有効なプロビジョニングプロファイルが見つかりませんでした。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ERROR ITMS-9000: "Redundant Binary Upload. 列車 '1.0' のビルドバージョン '1.0' のバイナリアップロードが既に存在します" と表示されました。
-
制御が非ボイド関数の終了に達する
-
dyld: ライブラリがロードされていません。エラーの解決
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] UITableViewの下にある余分なセパレータをなくす
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] 16進カラーバリューの使用方法