2015-09-07 3 views
6

Apple Receipt CheckにはReceigenを使用しています。 私は私のプロジェクトのために適切なファイルを生成し、私のビルドプロセスでスクリプトを統合した:Xcode Script - info.plistの代わりにビルド設定からバンドルIDを取得

# Receigen binary 
RECEIGEN="/Applications/Receigen.app/Contents/MacOS/Receigen" 

# Extract Info.plist information 
INPUT="$INFOPLIST_FILE" 
BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"` 
BUNDLE_VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INPUT"` 

# Expand information if needed 
EXPANDED_BUNDLE_ID=`eval "echo $BUNDLE_ID"` 
EXPANDED_BUNDLE_VERSION=`eval "echo $BUNDLE_VERSION"` 

# Make sure the destination directory exists 
mkdir -p "$DERIVED_FILES_DIR" 
HEADER="$DERIVED_FILES_DIR/receiptCheck.h" 

# Check if the generation is needed 
if [ -e "$HEADER" ]; then 
SKIP=`grep -q "$EXPANDED_BUNDLE_ID" "$HEADER" && grep -q "$EXPANDED_BUNDLE_VERSION" "$HEADER" && echo "YES"` 
fi 

# Generate the header file if needed 
if [ "x$SKIP" = "x" ]; then 
"$RECEIGEN" --identifier "$EXPANDED_BUNDLE_ID" --version "$EXPANDED_BUNDLE_VERSION" --failure 'exitwith173' --success 'runapplication' --os osx > "$HEADER" 
fi 

Xcodeの7の問題は、この行を次のとおりです。

BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"` 

BundleIDので新しいXcodeの上Info.plistの代わりにビルド設定になっていますビルド設定のキーは$(PRODUCT_BUNDLE_IDENTIFIER)

です。スクリプトのビルド設定からバンドルIDを抽出する方法はありますか?

+0

は私もこれを見ているエコー - あなたが解決策を見つけましたか? EXPANDED_BUNDLE_ID = 'eval" echo $ BUNDLE_ID "が失敗していると思います。 – Scotty

+0

まだReceigenのサポートからの回答がありません。しかし、私はそれがPlistbuddyツールとinfo.plistからBundleIDを抽出している他の行を信じています。ビルド設定からBundleIDを抽出する方法が必要です。あなたが方法を見つけたら教えてください。 –

答えて

3

あなただけの代わりにバンドルIDをハードコーディングの$PRODUCT_BUNDLE_IDENTIFIERを使用することができます。

EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER 

PRODUCT_BUNDLE_IDENTIFIER周りに括弧が存在しないことに注意してください)。

その後、不要になったので、BUNDLE_ID=で始まる行を削除することができます。

+0

ありがとうございました!他のスクリプトステートメントのように引用符で囲んで書くと違いがありますか?例:EXPANDED_BUNDLE_ID = "$ PRODUCT_BUNDLE_IDENTIFIER" –

+1

引用符はスペースを保護するので、バンドルIDにはスペースを入れないでください。しかし、スペースを使った他の定義と一線を画しています。 – Thorsten

+0

私は正確な問題を抱えています。私のビルドは次のような行で失敗しています: CFStringRef InAppValidation_str1 = @ obfuscateCF @( ""); しかし、ここの修正は私のために働いていません。誰もがもう少しのヒントを持っていますか? –

0

私は同じ問題を抱えています。これを回避する方法があります。このスクリプトでは、交換してください:

com.foo.barは私の製品バンドル識別子です

EXPANDED_BUNDLE_ID='com.foo.bar'

EXPANDED_BUNDLE_ID=eval "echo $BUNDLE_ID"

を。これは少なくとも私が働き続けることができるように、受信者をコンパイルすることができます。

0

それは非常に簡単です:

BUNDLE_ID = xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER

は$ BUNDLE_ID

関連する問題