【脱獄アプリ開発】第7回theosのインストールから簡単なTweakの作成までのガイドライン

2013/09/05 15:55

連載シリーズ第7回目となる今回は、現在のJailbreak Tweakを作る上で最もポピュラーな「theos」について紹介します。

脱獄用のTweakを作りたいと考えている方は、前回までの復習をしておくといいでしょう!

iOS development

theosインストール方法

必要な物は、Mac OS XがあればOKです(事前にXCodeCommandLineTooldpkgをインストール)iOSデバイス上でも出来ないことはないですが、実用的に考えるとオススメできません。

iOS側の準備としては、開発機(出来ればiPhone 4)があるといいでしょう。A4デバイスなので、Limera1n exploitが使用できるのと、iOS 7にも対応しています。
  • OpenSSH
  • Syslog Toggle
  • syslog to /var/log/syslog
  • BigBoss Recommended Tools
以上のものをインストールしておきます。

Theos/Getting Started - iPhone Development Wiki

通常のインストール方法は、こちらを参考にしてもらうとわかりますが、日本語で解説しているところはなく、意外と敷居が高く感じられます。

2016/3/19 追記
新しくなったtheosに対応した記事を書きましたので、そちらをご覧ください。
Link:【脱獄アプリ開発】第11回新しいtheosのインストールと簡単なTweakの作成方法





Theos install script
しかし、こちらのシェルスクリプトを利用すれば、簡単に構築することができます。

Download:install_theos.sh
右クリックからリンク先を保存してください。

Download後は、ターミナルでシェルスクリプトを実行すればOKです。

cd ~/Downloads
sudo sh install_theos.sh
/opt/theosに必要なパッケージがインストールされます。
参考:Beginning Jailbroken iOS Development - Getting The Tools | brandontreb.com

EmacsでTheosのディレクトリを登録

次に使いやすくなるように「.bash_profile」へディレクトリを登録しておきます。ターミナルを開いて、以下のコマンドを入力します。
 cd ~
emacs .bash_profile
export THEOS=/opt/theos
ctrl+x ctrl+sで保存→ctrl+x ctrl+cでEmacsの終了
これにより、ターミナル上で「$THEOS」と入力すると「/opt/theos」ディレクトリを指定したことになりました。
(次回ターミナルを開いた時に有効)

参考:Beginning Jailbroken iOS Development - Building And Deployment | brandontreb.com

サンプルTweakの作成

Beginning Jailbroken iOS Development - Your First Tweak | brandontreb.com
こちらで紹介されているTweakを作ってみましょう。初めに、Tweakを作成するためのフォルダを作っておき、そのディレクトリの中で管理していくといいでしょう。

「XtraFinder」をインストールしておくと、そのディレクトリで右クリック→ターミナルで開くということが出来るのでオススメします。
[Mac] 「XtraFinder」と「BetterTouchTool」で武装したFinderは最強かもしれない | Tools 4 Hack
1.ターミナルで「$THEOS/bin/nic.pl」と入力
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/application
[2.] iphone/cydget
[3.] iphone/dashboardx_widget
[4.] iphone/framework
[5.] iphone/library
[6.] iphone/notification_center_widget
[7.] iphone/preference_bundle
[8.] iphone/sbsettingstoggle
[9.] iphone/tool
[10.] iphone/tweak
Choose a Template (required):
このような表示になりますので「10」と入力

2.Project Nameを「WelcomeWagon」とします

続けてPackage Nameを決めます。通常は自分のドメインを反対から入力し、最後に小文字でプロジェクト名を付けます(例.com.ichitaso.welcomewagon)これがCydiaのパッケージIDになります。

Author/Maintainer Nameは、ローマ字で自分の名前やニックネームを入力します。Package Nameを「com.ichitaso.welcomewagon」としていた場合、自動的に「ichitaso」となります。
3.MobileSubstrate Bundle filter [com.apple.springboard]
ここではTweakを選択したので、SpringBoardを対象としたTweakに自動的になりますので、そのままreturnを押して構いません。また後から追加編集することができます。
4.Tweak.xmの編集

Tweak作成用のディレクトリで上記コマンドを入力後、そこに「welcomewagon」というフォルダができているかと思います。

theos:theos本体へのシンボリックリンク
control:debパッケージにする際のcontrolファイル
Makefile:パッケージをビルドするときに必要な物を記したファイル
Tweak.xm:プログラムを書くためのファイル
WelcomeWagon.plist:Tweakの対象を記したファイル
このような構成になっています。

このまま作業を行なってもいいんですが、Tweak.xmを開くとSyntaxHighlightされていない状態でXcodeが開かれます。そこで、見やすいように一手間加えてあげます。
ターミナル上で以下のコマンドを入力

mv Tweak.xm Tweak.mm; ln -s Tweak.mm Tweak.xm
5.プログラムを記述する

Tweak.xmを開き、全て削除し以下のコードをコピペして下さい。

#import <SpringBoard/SpringBoard.h>
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application {
%orig;

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome"
message:@"Welcome to your iPhone Brandon!"
delegate:nil
cancelButtonTitle:@"Thanks"
otherButtonTitles:nil];
[alert show];
[alert release];
}

%end
これは、SpringBoardを%hookしてSpringBoardが起動(Respring時)にUIAlertViewを表示させるといった簡単なSampleです。
%hook クラス名 %orig; で、そのオリジナルの動作を行わせ、その後にコードを追加することで通常の動作に自分が行いたい動作を加えることができるといったものです。

最後は、%endで終了することを知らせます。

seekpoint: theos
詳しい内容は、@r_plusさんの記事を参照
6.ビルドしてみる

それでは実際にビルドしてみましょう。

ターミナル(welcomewagonディレクトリ)上で「make package」と入力すると、パッケージを作成することができます。
おそらくエラーが出たかと思います。

make[2]: *** [obj/WelcomeWagon.dylib.ba964c90.unsigned] Error 1
make[1]: *** [internal-library-all_] Error 2
make: *** [WelcomeWagon.all.tweak.variables] Error 2
7.Makefileの編集

一番上に「ARCHS = armv7」、次に「export THEOS_DEVICE_IP=自分のWi-Fi IPアドレス」、「WelcomeWagon_FILES = Tweak.xm」の下に「WelcomeWagon_FRAMEWORKS = UIKit」を追記しましょう。
追記:64bitのCPU(iPhone 5sやiPad mini 2)に対応させる時は「ARCHS = armv7 arm64」と記述してください。

このような感じです。もう一度「make package」してみましょう!
今度は出来たかと思います。

8.debパッケージをインストール

初めに、sshで接続してあげる必要があります。

ssh [email protected]
alpine(デフォルトの場合)
これで、登録するかどうか聞かれるので「yes」と入力して下さい。もし上手くいかない場合は、隠しファイル表示切り替えアプリ HiddenSwitchをインストールして、「~/.ssh/known_hosts」をテキストエディタで開き、全て削除してください。
また、OS Xで自動的に作成される.DS_Storeを作成しない環境にしておくと、後々役立つかと思いますので、合わせてやっておきましょう。

Macで.DS_Storeファイルを作らない方法&削除ツール | BLANCBOOTH
では改めて、「make install」とターミナル上で入力→パスワードを3回聞かれますので、設定したrootパスワードを入力して下さい。

インストールが完了すると、以下のようにアラートが表示されます。

これで初めてtheosで作った自作Tweakが出来ました!

その他のTips

オリジナルのものを作るにあたって
GitHubやStack Overflow、Googleなどでいろいろと調べてみましょう。参考になるものが、たくさんあります。

また、自分のようにプログラミング初心者の場合、Objctive-Cの基本的な知識が無いと思わぬ問題を引き起こすものを作ってしまう可能性があります。

ネットの断片的な情報より纏まった書籍で勉強するのがお勧めです。

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)  Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

Amazon
現在は、こちらの書籍で復習を兼ねて勉強しています。今後iOSアプリを作りたいとなった場合にも役立つものになるかと思います。

iOS 7がリリースされてどうなるかわかりませんが、基本的な部分は変わらないので、役に立つ面白いものができるように頑張って行きましょう!