2011-08-02 12 views
18

中のInfo.plistを変更:のプロパティの変更 のiOS:私は次の操作を実行しようとしているビルドフェーズ

  • 、ビルド・フェーズ

    1. をプレーンテキストファイルを開いて、テキストを読み値info.plistを手順1で取得した値に設定します。

    このためのシェルスクリプトを作成できますか?

    誰かがこれを達成するために私を導くことができれば素晴らしいことでしょう。

  • 答えて

    13

    はいできます。私は3つのステップでそれを行います:

    1. 最初のビルドフェーズの前に実行されるシェルスクリプトを作成します。このスクリプトで環境変数を設定しましょう。
    2. 「Info.plistでビルド設定を展開する」プロジェクト用に有効にします。
    3. ​​のようなplistファイルの環境変数を使用してください。
    +1

    ありがとうございます!しかし、この段階でファイルを開いてそこからテキストを読むにはどうすればいいですか? – Mithin

    +0

    @ミチン - シェルスクリプトを記述する言語に完全に依存します。 – PeyloW

    +1

    キーがブール値の場合はどうなりますか?それは環境変数名プレースホルダを受け入れません。 –

    7

    @PeyloWはこれを行う方法の1つを提供します。もう一つの方法は、実行スクリプトビルドステップを追加することです。そのステップでは、Info.plistを書き直すことができます。私はこのことをいつも行い、宗教改革を設定する。

    スクリプトをファイルに入れて、スクリプト実行フェーズに. myscript.shと入力することをおすすめします。これは、スクリプト全体を直接Xcodeに入れるよりも、理解して維持する方が簡単です。

    +2

    +1スクリプトを別のファイルに入れます。 私はplistファイルも書き直していました。しかし、そうすることで、ソース管理のplistファイルを不必要に修正する傾向があります。そこで私はenv-variableソリューションに変更しました。 – PeyloW

    +0

    env変数の解決策はいいですし、別のバージョン管理スクリプトを作成した場合、簡単にするためにそのアプローチに切り替えることができます。スクリプトはより柔軟です。 –

    2

    私はinfo.plistのフィールドにビルド番号を入れるスクリプトファイルを持っています。プロジェクトのinfo.plistにプレースホルダーのテキストを置いて、スクリプトで置き換えます。リリースビルドのビルド番号をインクリメントします。開発ビルドでは、開発ビルドだと言っているだけです。

    if [ "$BUILD_STYLE" = "Release" ] 
        then 
        if [ ! -f build-number ]; then 
         echo 0 > build-number 
        else 
         expr `cat build-number` + 1 > build-number.new 
         mv build-number.new build-number 
        fi 
    
        perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`cat build-number`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist 
        else 
        perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`echo Development`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist 
        fi 
    
    16

    おそらく最も簡単な方法は、PlistBuddyを使用することです。私はこのようになりますスクリプトの実行フェーズがあります。

    BUILD_NUMBER=`git rev-list HEAD --count` 
    INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
    if [ -f "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" ] ; then 
        oldversion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$INFO_PLIST"` 
    fi 
    if [ "$BUILD_NUMBER" != "$oldversion" ] ; then 
        /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFO_PLIST" 
    fi 
    

    を(Info.plistは、ターゲットの場所にコピーされていないので、Xcodeの6から始まる、あなたが後にコピーバンドルのリソースの位相をこのを実行する必要があることに注意してください)そして、PlistBuddyは失敗します。

    編集01/17:不要なコピーや署名を避けるために更新されました。本当に何かが変わらない限り、Info.plistに触れたくはありません。そうしないと、Xcodeはそれを(したがってターゲットも)変更して扱います。以前の値CFBundleVersionをチェックすると、ビルドが大幅に高速化され、noopビルドで数秒の節約になりました。

    +0

    私のスクリプトは通常のビルドではうまくいったが、アーカイブビルドでは失敗した理由は分かりませんでした。バンドルリソースのコピーの後に実行する必要があります。ありがとうございました! –

    関連する問題