2016-05-13 21 views
4

CFBundleShortVersionStringをLaunchStoryboardにUILabelテキストとして表示する方法はありますか?インクリメントするたびに手動で入力する必要はありませんか?私はコードでそれを行う方法を知っていますが、LaunchStoryboardが表示されている間はコードを実行することはできません。
は、Xcodeの変数を通して、それは可能ですか?LaunchStoryboardにCFBundleShortVersionStringを表示するにはどうすればよいですか?

+1

私の更新された回答を見てください。今は完全な解決策があります。 – rmaddy

答えて

2

バージョン&を更新するためのスクリプトを作成しました。余分なファイルを使用せずに、最初の回答に基づいてLaunchScreen.storyboardのビルドラベルを作成しました。残念なことに、Clemens Brockschmidtの解決策は、構文エラーと誤ったパスのために動作しません。

アイデンティティ・インスペクタ・ペイン - >ドキュメント - >ラベルで、ラベルに「APP_VERSION」という名前を付けるようにしてください。

また、「バンドルリソースのコピー」フェーズ前にスクリプトを作成します。 XCodeの9(スウィフト4)で/ binに/ SH::

そして、ここでシェルとの最終的な作業のスクリプトです

# ON/OFF Script Toggle (script ON with #, script OFF without #) 
exit 0 

# Increment build number 
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}" 

# Output version & build numbers into a label on LaunchScreen.storyboard 
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}") 
sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"Version: $versionNumber Build: $buildNumber\"/" $PROJECT_DIR/>>>CHANGE ME<<</Base.lproj/LaunchScreen.storyboard 

注: '< < < MEを変更>>>は、' プロジェクト名です。

BONUSビルド番号インクリメンタとON/OFFスクリプトの切り替えが含まれています。何か問題がある場合、またはこれがあなたのために働くかどうかを教えてください。

-1

編集

起動画面を動的にする方法はありません。代替が

前の回答

以下の通りである

あなたはLaunchScreen.xibにごinital VCが同様にし、その中でなければならないなど、あまりにもローカライズといい を動作しません。ラベルを作ってください。

ここでViewControllerでは、NSBundleメソッドを使用して情報plistにアクセスし、その値を設定できます。我々はすべて知っているようにあなたが

let appVersion = NSBundle.mainBundle().infoDictionary["CFBundleVersion"]; 
myLabel.text = "\(appVersion)" 
+0

これは、起動画面のバージョンをどのように表示しますか?起動画面のストーリーボードにコードを記述することはできません。 – rmaddy

+0

質問から私は、最初の画面に毎回入力する必要なしに数字を表示することが必要であることがわかります。これは自動化され、起動画面からバージョン画面への移行はまだ自然に見えます。 – Shubhank

+0

OPがバージョンを表示したい起動画面に表示されます。起動画面の後には一部の画面が表示されません。 – rmaddy

5

をしたい場合、これは中か何かの起動画面から最初のVCへの移行がスムーズにし、バージョンコードのアニメーションで自然に見えるでしょう、あなたは起動画面でコードを置くことができません。そして、残念ながら(あなたが前処理は、ヘッダファイル内の値とのInfo.plistことができる方法に類似)の起動画面でラベルのテキストのための変数を使用するための組み込みの方法はありません。

目的を達成するために使用できる唯一のオプションは、LaunchScreen.storyboardファイルを更新する独自のスクリプトを作成し、そのスクリプトをターゲットのカスタムビルドフェーズとして追加することです。

これを簡単にするために、Info.plistのプリプロセッサフ​​ァイルを使用するようにターゲットを設定します。これで作業が完了したら、LaunchScreen.storyboardファイルを処理するためにスクリプトで質問することができる別個の単純なヘッダーファイルが作成されました。

Info.hという名前のファイルを作成し、プロジェクトのルートに追加します。

はここに完全なソリューションです。

#define APP_VERSION 2.6 // Update this version as needed 

今Xcodeでプロジェクトのターゲットを選択し、[全般]タブに移動します。

は、次の行を追加します。バージョンの値を変更するには、そこにある番号をAPP_VERSIONに変更します。

[ビルド設定]タブを選択します。 Infoで検索してください。 [梱包]セクションのPreprocess Info.plist FileYesに設定します。また、Info.plist preprocessing Prefix FileInfo.hに設定します。

ビルドを行うと、Info.plistのCFBundleShortVersionStringの値はInfo.hファイルの値に設定されます。

お使いの起動画面のストーリーボードを選択し、バージョン番号が含まれていますラベルを選択:次の操作を行い、合わせて更新の起動画面ファイルにラベルを取得するために

。アイデンティティインスペクタペインを表示します。 Label属性にAPP_VERSIONと入力します。ストーリーボードファイルを見ると、ラベルのXMLにuserLabelという属性が表示され、値はAPP_VERSIONになります。

プロジェクトターゲットに戻り、[ビルドフェーズ]タブを選択します。 +アイコンをクリックして、新しいスクリプト実行フェーズを追加することを選択します。新しいフェーズの名前を "Update Launch Version"のようなものに変更してください。次に、新しいフェーズを既存の[バンドルリソースのコピー]フェーズの前にドラッグします。

新しい「起動バージョンの更新」フェーズを開きます。シェルフィールドに/bin/bashと入力します。フェーズに次のコードをコピーして貼り付けます。

VERSION=`cat Info.h | grep APP_VERSION | cut -f3 -d' '` 

sed -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$VERSION\"/" Storyboard.storyboard > tmp.storyboard 

ここでクリーンビルドを行います。これは現時点でのテストです。 tmp.storyboardを見て、正しく表示されていることと、アプリバージョンのラベルに正しいバージョンが表示されていることを確認してください。

それが動作されると、上記のコードに更新します。

VERSION=`cat Info.h | grep APP_VERSION | cut -f3 -d' '` 

sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$VERSION\"/" Storyboard.storyboard 

この最終バージョンでは、実際に起動画面ストーリーボードファイルを更新します。以前のバージョンでは、ストーリーボードを破棄することなく他のすべてが動作していることを確認するテストでした。

+0

あなたの答えをありがとう。正しい軌道に乗るのに役立ちました。バージョン番号を設定するために 'Info.h'ファイルを使う代わりに、私は' Info.plist'から直接読みました。 'BUNDLE_ID = $(/ usr/libexec/PlistBuddy -c" Print:CFBundleShortVersionString "" Info.plist ") sed -i bak -e"/userLabel = \ "APP_VERSION \ "/ s/text = \" [^ \ "] * \"/text = \ "$ BUNDLE_ID \"/"LaunchScreen.storyboard' –

関連する問題