DSYMファイルの自動保存方法
3354 ワード
原文の住所:http://www.cimgf.com/2009/12/23/automatically-save-the-dsym-files/もし原作者が著作権侵害行為を発見したら、24時間以内に削除するよう命じられます.
いつからか、OCで作成したアプリケーションは、MacアプリケーションでもiOSプログラムでも、コンパイルする時に弾いたデバッグ情報は一山のアセンブリまたはバイナリ情報です.したがって、アプリケーションのcrashでは、Javaなどの他の言語と違って、OCはプログラムが崩壊する原因に位置づけられにくいです.しかし、OCプログラムはコンパイルする時dSYSMファイルを生成します.このファイルはこれらのデバッグ情報と私達のダッシュクラッシュログをマッチングさせることができます.そうすると、私達のより良い位置をcrashの位置に配置することができます.
注意したいのは、dSYSMファイルは直接にバイナリとマッチングしなければなりません(Mach-oオブジェクトごとにuuidが埋め込まれていますので、このuuidはdsymファイルのuuidに対応していなければなりませんので、再包装後のuuidは使えません)ので、プロジェクトごとにテストパッケージを作成したり、パッケージを公開した後は手動でdSYSMファイルを保存してください.これは開発者にとってつらいです.
毎回手動で保存する問題を解決するために、シナリオを書きました.毎回パッケージを構築してからこのシナリオを実行します.このスクリプトはプロジェクトの中の同名(dSYSM)のディレクトリにdSYSMファイルを移動します.このスクリプトはまた、コードがgit倉庫に提出されているかどうかを確認し、このファイルもgitに提出します.名前の問題を解決するために、スクリプトはファイル名を現在の日付に変更します.
失敗チェック
スクリプトの最初のことは正常に動作することを確認することです.
ファイルを移動
何千何万人もの開発者のプロジェクトファイルのパスが違いますので、システムが提供する環境変数を使ってコンパイル後に生成されたdSYSMファイルの位置を特定します.
バージョン制御に送信
今はプロジェクトがないはずです.バージョンコントロールをしないですよね.
結論
最近私はxcodeが持参したsmbolicaterashツールを使っていますが、最終的には問題が発生しました.これらのdSYSMファイルは追跡crashのいいものです.添付ファイルはファイルを提供しています.私は通常このファイルをプロジェクトに入れます.スクリプトがファイルのスクリプトを専門に実行しています.Move_dSY_トムStrage.sh.zip
更新
Reader Rob Elkinからヒントをもらいました.次は更新後のシナリオで、私が使っている最新バージョンです.
いつからか、OCで作成したアプリケーションは、MacアプリケーションでもiOSプログラムでも、コンパイルする時に弾いたデバッグ情報は一山のアセンブリまたはバイナリ情報です.したがって、アプリケーションのcrashでは、Javaなどの他の言語と違って、OCはプログラムが崩壊する原因に位置づけられにくいです.しかし、OCプログラムはコンパイルする時dSYSMファイルを生成します.このファイルはこれらのデバッグ情報と私達のダッシュクラッシュログをマッチングさせることができます.そうすると、私達のより良い位置をcrashの位置に配置することができます.
注意したいのは、dSYSMファイルは直接にバイナリとマッチングしなければなりません(Mach-oオブジェクトごとにuuidが埋め込まれていますので、このuuidはdsymファイルのuuidに対応していなければなりませんので、再包装後のuuidは使えません)ので、プロジェクトごとにテストパッケージを作成したり、パッケージを公開した後は手動でdSYSMファイルを保存してください.これは開発者にとってつらいです.
毎回手動で保存する問題を解決するために、シナリオを書きました.毎回パッケージを構築してからこのシナリオを実行します.このスクリプトはプロジェクトの中の同名(dSYSM)のディレクトリにdSYSMファイルを移動します.このスクリプトはまた、コードがgit倉庫に提出されているかどうかを確認し、このファイルもgitに提出します.名前の問題を解決するために、スクリプトはファイル名を現在の日付に変更します.
失敗チェック
スクリプトの最初のことは正常に動作することを確認することです.
if [ "$BUILD_STYLE" == "Debug" ]; then
echo "Skipping debug"
exit 0;
fi
最初の行はプロジェクトのコンパイルモードがdebugかどうかをチェックします.デバッグモードで作ったカバンはほとんど開発者の設備で試運転されます.そこには多くのデバッグ情報が含まれています.これらの情報は無視できます.if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
echo "Skipping simulator build"
exit 0;
fi
二番目のステップは運行する設備がシミュレータかどうかを確認します.そうであればdSYSMファイルは保存されません.ファイルを移動
何千何万人もの開発者のプロジェクトファイルのパスが違いますので、システムが提供する環境変数を使ってコンパイル後に生成されたdSYSMファイルの位置を特定します.
SRC_PATH=${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
RELATIVE_DEST_PATH=dSYM/${EXECUTABLE_NAME}.$(date +%Y%m%d%H%M%S).app.dSYM
DEST_PATH=${PROJECT_DIR}/${RELATIVE_DEST_PATH}
echo "moving ${SRC_PATH} to ${DEST_PATH}"
mv "${SRC_PATH}" "${DEST_PATH}"
次はフォルダを作成してファイルを移動します.ファイルのパスを変数に保存するのが好きです.これはコンソールでプリントアウトして、パスが間違っているかどうかを確認できます.バージョン制御に送信
今はプロジェクトがないはずです.バージョンコントロールをしないですよね.
if [ -f ".git/config" ]; then
git add "${RELATIVE_DEST_PATH}"
git commit -m "Added dSYM file for ${BUILD_STYLE} build" \
"${RELATIVE_DEST_PATH}"
fi
最後の部分はプロジェクトが遠隔倉庫の中にある時だけ実行します.シナリオは新しいフォルダをgit倉庫に提出して、簡単な提出情報を添えます.結論
最近私はxcodeが持参したsmbolicaterashツールを使っていますが、最終的には問題が発生しました.これらのdSYSMファイルは追跡crashのいいものです.添付ファイルはファイルを提供しています.私は通常このファイルをプロジェクトに入れます.スクリプトがファイルのスクリプトを専門に実行しています.Move_dSY_トムStrage.sh.zip
更新
Reader Rob Elkinからヒントをもらいました.次は更新後のシナリオで、私が使っている最新バージョンです.
echo "starting dsym archiving"
if [ "$BUILD_STYLE" == "Debug" ]; then
echo "Skipping debug"
exit 0;
fi
if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
echo "Skipping simulator build"
exit 0;
fi
SRC_PATH=${ARCHIVE_DSYMS_PATH}/${DWARF_DSYM_FILE_NAME}
RELATIVE_DEST_PATH=dSYM/${EXECUTABLE_NAME}.$(date +%Y%m%d%H%M%S).app.dSYM
DEST_PATH=${PROJECT_DIR}/${RELATIVE_DEST_PATH}
echo "moving ${SRC_PATH} to ${DEST_PATH}"
cp -r "${SRC_PATH}" "${DEST_PATH}"
if [ -f ".git/config" ]; then
git add "${RELATIVE_DEST_PATH}"
git commit -m "Added dSYM file for ${BUILD_STYLE} build" "${RELATIVE_DEST_PATH}"
fi
:
SRC_PATH=${ARCHIVE_DSYMS_PATH}/${DWARF_DSYM_FILE_NAME}
今はパッケージを構築した後の記憶経路が変わったと思います.mvコマンドをcp-rに変えました.元のファイルを新しいフォルダにコピーするのがもっと好きです.元のファイルには何の影響もありません.これがあなたを助けることができることを望んで、Robがあなたの考えを分かち合うことにも感謝します.