他の人にもらったiPhoneのプロジェクトファイルを自分の実機にインストールするとき
Code Signing Identity 'Erica Sadun' does not match any valid, non-expired, code-signing certificate in your keychain.
のようなエラーが出ることがあります。ちなみに上のエラーは、iPhoneハックの女王エリカ様のサンプルコードをコンパイルしようとした時のものです。
このエラー対策をググると、XCodeのメニューでコード署名IDを自分のものに直せばいいのだという情報を見つけました。しかし自分の場合はそこを変えただけではうまくいかなかったので、直接プロジェクトファイルを見てみました。
プロジェクトファイルは拡張子.xcodeprojですが、これは実はディレクトリーになっていて、その中のproject.pbxprojというファイルにビルド設定などが含まれているようです。右クリックして「パッケージの中身を表示」で以下のように開けます。
project.pbxprojはテキストエディットなどで見ます。すると以下のような行があります。
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Erica Sadun";
このCODE_SIGN_IDENTITYというところがエラーの原因でした。自分の実機に入れるときはここを
"CODE_SIGN_IDENTITY" = "iPhone Developer";
に変更すれば動くようになります。本来はメニューから変えられるはずなのでXCodeのバグかもしれません。
ところで、エリカ様のサンプル・プロジェクトは実に沢山あるので、いちいち直していくのは面倒です。なのでバッチを書きました。別にエリカ様のサンプルでなくても使えます。
USAGE:
$ sh modify_code_sign.sh <ディレクトリー>
として使うと、<ディレクトリー>以下全てのproject.pbxprojファイルのCODE_SIGN_IDENTITYを書き換えます。元ファイルに上書きするので一応使用前にバックアップしてください。もし壊れても責任は負えません:-)
以下、ソースです。
#!/bin/sh
#This file is modify_code_sign.sh
SPACE_ESCAPE="\*SPACE\*" #ファイル名の一時変更(for対策)
REPLACE=CODE_SIGN_IDENTITY
FILES=$(find $1 -name project.pbxproj | sed "s/ /$SPACE_ESCAPE/g")
for FILE in $FILES; do
FILE=$(echo "$FILE" | sed "s/$SPACE_ESCAPE/ /g")
echo $FILE
CONTENT=$(cat "$FILE" | awk 'BEGIN {c=1} /'$REPLACE'/ {if (c==1){c=0; print "CODE_SIGN_IDENTITY = \"iPhone Developer\";";}} !/'$REPLACE'/ {print $0}')
echo "$CONTENT" > ${FILE}
done
؛spɹɐƃǝɹ ʇsǝq
返信削除˙ǝʇısqǝʍ ɹno oʇ oƃ uɐɔ noʎ 'ʇuoɟ ǝnbıun puıɟ oʇ pǝǝu noʎ ɟı
'ʎɐʍ ǝɥʇ ʎq
˙ƃoןq ǝɔıu ɐ ǝʌɐɥ noʎ
¡ƃuıʇǝǝɹƃ ɯɹɐʍ ¿noʎ ǝɹɐ ʍoɥ ¡oןןǝɥ