ろばの穴・別館 Annex

アップル製品への熱い想い & PCガジェット全般のメモ

ipa から mediba の広告SDK が使われているかどうかを判断するスクリプト

今度は URLスキームじゃなくて mediba SDK のチェック

▼ この方のTweetから
Twitter / @maloninc: Music/iTunes/Mobile\ Appli ...

▼ こちらを確認した上で、日本語名のアプリでも確認できるようにしてみました。
iPhoneアプリ向け広告配信SDK - mediba ad tech infomation

私は ruby が書けないので相変わらず bash です。今度はターミナルで実行するだけにとどめてあります。Automator.app にすると可読性悪くなるので。私はこれをcronに登録して自動起動しています。

以下、私の環境の場合(ミュージックフォルダをホームから動かしているため)

# chmod +x medibaCheck.sh
# ./medibaCheck.sh /Volumes/SecondD/Music/iTunes/Mobile\ Applications

ミュージックフォルダがデフォルトのままの人は、

# ./medibaCheck.sh

だけでOKです。別にデフォルトを書き換えてもOKなんですけど。拡張子を.command にするとダブルクリックで起動できるそうなので、Automator.app にするまでもなさそうです。結果はデスクトップにそれらしき名前の HTMLファイルで出力されます。


▼ 無駄に HTMLファイルに出力バージョン
テキストファイルに出力するだけなら、この1/3以下で済みます。

#!/bin/bash
# medibaCheck.sh : 2012/03/20 18:27:46 by Stray Donkey

now=`date "+%Y%m%d-%H%M%S"`
basedir="${HOME}/Desktop"
outf="${basedir}/medibaCheck-${now}.html"

#-- デフォルトを定数 第1引数があればそれを使う
appLocation="${HOME}/Music/iTunes/Mobile Applications"
 if [ $# -ge 1 ] ; then
	appLocation="$1"
fi 

declare -i counter=0
rm -rf /tmp/fflag
searchpat="MasManagerViewController"

function scanipafile {
  ipafile="$1"

	basepath=`zipinfo -1 "$ipafile" | egrep "$searchpat"`
	if [ -n "$basepath" ]; then
		let counter=$counter+1
		echo $counter > /tmp/fflag
		echo "<tr><td class='status'>$ipafile</td></tr>"
	fi
}

cat << EOT > $outf
<!DOCTYPE html>
<html lang='ja'>
<head>
	<meta charset='UTF-8'>
	<style media="screen and (min-device-width: 641px)">
	body {
		background-color: darkseagreen;
		width: 90%;
	}	
	.title {
		font-size:120%;
		padding:10px 22px;
	}
	.sn {
		font-size:90%;
		padding:10px 5px;
		text-align:right;
	}
	.ta1 {
		width: 90%;
		margin-top:20px;
		margin-left:50px;
		margin-bottom:10px;
	}
	</style>
	<style media="only screen and (max-device-width: 640px)">
	body {
		background-color: lightpink;
		width: 98%;
	}
	.title {
		font-size:120%;
		padding:3px 5px;
	}
	.sn {
		font-size:90%;
		padding:5px 5px;
		text-align:right;
	}
	.ta1 {
		width: 98%;
		margin-top:5px;
		margin-left:5px;
		margin-bottom:5px;
	}
	</style>
	<style>
	.ta1 th {
		border-bottom:double 3px #666666;
		text-align:left;		
	}	
	.ta1 td {
		border-bottom:solid 1px #666666;
	}
	.ta1.status {
		text-align:center;
	}
	.ta1 th,.ta1 td {
		padding:10px 22px;
	}
</style>
</head>
<body>
<p class="title"><b>mediba Checker v0.9</b></p>
<table class='ta1' cellspacing='0'>
<th>App filename</th>
EOT

find "$appLocation" -iname "*.ipa" -exec ls \{\} \; | while read ipafile
do
  scanipafile "$ipafile" >> $outf
  echo "ipafile= "$ipafile "count= " $counter >&2
done

echo "*****count= " $counter "fflag= " `cat /tmp/fflag` >&2

if [ -e /tmp/fflag ] ; then
	cat << EOT >> $outf
	</table>
	<p class="title"><b>Total found `cat /tmp/fflag` mediba module</b></p>
	<p class="sn">by Stray.D 2012/03/12 </p>
	</body></html>
EOT
else
	cat << EOT >> $outf
	</table>
	<p class="title"><b>Congratulations! Not found mediba module</b></p>
	<p class="sn">by Stray.D 2012/03/12 </p>
	</body></html>
EOT
fi
echo $outf

改編、ご自由にどうぞ。

あ、結果のほうですが、以下2つが引っかかりました。

bash に関して、自分的保留事項

    • 変数のスコープ(今回もなんかうまくいかなくて回避する時間なくなったのでtempファイルで逃げた)
    • ${変数#パターン} 的な使い方
    • [[ 変数 =~ 正規表現 ]] 的使い方