【脱獄アプリ開発】第11回新しいtheosのインストールと簡単なTweakの作成方法

2016/03/19 20:12

how-to-install-theos-top

今回は、以前紹介したtheosの構築方法が古いものになってしまったので、新しくなったtheosと簡単なTweakの作成方法を紹介いたします。

theosを構築するための準備

参考:Installation · theos/theos Wiki
1.XcodeとCommand Line Toolsのインストール
Xcode - What's New - Apple Developer
Mac App Storeで公開されていますが、こちらからDownloadします。
『Xcode』と、使っているOSに合った最新の『Command Line Tools』をDLします。その際、Developer登録が必要になるので、登録しましょう!こちらは無料で登録できます。
登録方法は、「apple developers 登録方法 - Google 検索」こちら!

Platforms -> See what's new in Xcode -> Additional Tools
how-to-install-theos-01
how-to-install-theos-02
こちらからダウンロードしてください。

how-to-install-theos-03
2.Xcodeを起動して行番号を表示させる
how-to-install-theos-04
メニューの

Xcode -> Preferences -> Text Editing -> Line numbers
にチェックを入れると行番号が表示されます。

そのままだと見づらいので、何行目かわかるようにしておきましょう。

3.Macportsをインストール
The MacPorts Project -- Download & Installation
↑こちらのリンクからお使いのOSのものをクリックしてDownloadします。

ダウンロード後、インストールしてください。

how-to-install-theos-05
Macportsをインストールすると、/opt/localディレクトリができます。
4.Macportsを最新のライブラリに更新
ターミナルで以下のコマンドを入力、実行してください。

sudo port -d selfupdate
sudo port -f install dpkg
※El CapitanでMacportsから「dpkg」をインストールしたところ、うまくcompileできませんでしたので、その場合は「Homebrew」からインストールしてください。
参考:iOSOpenDev install solution · 535064094/iosOpenDevInstallTools Wiki
5.dpkgとldidのインストール
Homebrewからインストールします。

ターミナルで以下のコマンドを実行

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
brew install dpkg ldid
本来ならMacportsから「dpkg」をインストールすればOKなはずでしたが、うまく行かなかったのでHomebrewからインストールしました。
6.ghostのインストール
curl https://ghostbin.com/ghost.sh -o /usr/local/bin/ghost
chmod +x /usr/local/bin/ghost

theosのインストール

1.Emacsでtheosのディレクトリを登録
cd ~
emacs .bash_profile
export THEOS=/opt/theos
ctrl+x ctrl+sで保存 -> ctrl+x ctrl+cでEmacsの終了
一度ターミナルを開き直すことで、ターミナル上で「$THEOS」と入力すると「/opt/theos」ディレクトリを指定したことになります。
2.Githubからtheosをインストール
sudo git clone --recursive https://github.com/theos/theos.git $THEOS
以上で完了です。

how-to-install-theos-06
アップデートするときは

make update-theos
これでアップデートできるとのこと。

ちなみに、自分はまだ古いtheosを使っています。
theos.zip
これを/optディレクトリに入れることで、使用できます。
※もし使う場合、既存の/opt/theosは「theos-new」などとリネームしてください。

theosを使ったサンプルTweakの作成

NEXTi4HACKさんのコードを参考にしてみましょう。

「XtraFinder」をインストールしておくと、そのディレクトリで右クリック→ターミナルで開くということが出来るのでオススメします。
1.ターミナルで「$THEOS/bin/nic.pl」と入力
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/cydget
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/ios7_notification_center_widget
[7.] iphone/library
[8.] iphone/notification_center_widget
[9.] iphone/preference_bundle_modern
[10.] iphone/tool
[11.] iphone/tweak
[12.] iphone/xpc_service
Choose a Template (required):
このような表示になりますので「11」と入力

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

Author/Maintainer Nameは、ローマ字で自分の名前やニックネームを入力します。
3.MobileSubstrate Bundle filter [com.apple.springboard]
ここではTweakを選択したので、SpringBoardを対象としたTweakに自動的になりますので、そのままreturnを押して構いません。また後から追加編集することができます。
4.Tweak.xmの編集
Tweak作成用のディレクトリで上記コマンドを入力後、そこに「test」というフォルダができているかと思います。

how-to-install-theos-07
control:debパッケージにする際のcontrolファイル
Makefile:パッケージをビルドするときに必要な物を記したファイル
Tweak.xm:プログラムを書くためのファイル
Test.plist:Tweakの対象を記したファイル
このような構成になっています。

5.プログラムを記述する
Tweak.xmを開き、全て削除し以下のコードをコピペして下さい。

#import <SpringBoard/SpringBoard.h>
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application {
%orig;
UIViewController *view = [UIApplication sharedApplication].keyWindow.rootViewController;
while (view.presentedViewController != nil && !view.presentedViewController.isBeingDismissed) {
view = view.presentedViewController;
}
UIAlertController *alertController =
[UIAlertController alertControllerWithTitle:@"テスト"
message:@"単なるテストなんですよ"
preferredStyle:UIAlertControllerStyleAlert];
[alertController addAction:[UIAlertAction actionWithTitle:@"はい"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
//ボタンが押された時の処理
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"いいえ"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
//ボタンが押された時の処理
}]];
[view presentViewController:alertController animated:YES completion:nil];
}
%end
これは、SpringBoardを%hookしてSpringBoardが起動(Respring時)にUIAlertControllerを表示させるといった簡単なSampleです。
%hook クラス名 %orig; で、そのオリジナルの動作を行わせ、その後にコードを追加することで通常の動作に自分が行いたい動作を加えることができるといったものです。

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

6.Makefileの編集
ARCHS = armv7 arm64
THEOS_DEVICE_IP = 192.168.xxx.xxx(インストールするデバイスのIP)

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = Test
Test_FILES = Tweak.xm
Test_FRAMEWORKS = UIKit

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
install.exec "killall -9 SpringBoard"
64bitのCPU(iPhone 5sやiPad mini 2以降)に対応させる時は「ARCHS = armv7 arm64」と記述してください。

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

ターミナル(Testディレクトリ)上で「make package」と入力すると、パッケージを作成することができます。
「Debs」フォルダができて、「.deb」ファイルが作成されたかと思います。

8.debパッケージをインストール
初めに、sshで接続してあげる必要があります。

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

OS X El Capitanで「.DS_Store」を作らせない&削除する方法
それでは、「make install」とターミナル上で入力→パスワードを聞かれますので、設定したrootパスワードを入力して下さい。

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

how-to-install-theos-08
これで初めてtheosで作った自作Tweakが出来ました!

その他のTips

最初に聞かれるパッケージIDの先頭を編集
/opt/theos/bin/nic.pl
$package_prefix = "com.yourcompany" if !$package_prefix;
これを↓

$package_prefix = "com.ichitaso" if !$package_prefix;
こんな感じに編集すると、自分のIDがデフォルトになります。

how-to-install-theos-09
Slide to Unlockの文字を変えてみる
先ほどのTweak.xmを編集します。

%hook SBLockScreenView
-(void)setCustomSlideToUnlockText:(id)arg1
{
arg1 = @"Jailbreak!";
%orig(arg1);
}
%end
「make package install」でインストールしてみましょう。
how-to-install-theos-10
文字が「Jailbreak!」になりましたね!

バージョンを固定する
Makefileに以下の文字を記述する

PACKAGE_VERSION = $(THEOS_PACKAGE_BASE_VERSION)
.x .xmファイルなどをシンタックスハイライトする
RegisterUTIsForLogosApp.zip
こちらをダウンロードして、「RegisterUTIsForLogos.app」を起動すれば、シンタックスハイライトされていないファイルでもXcodeで有効になる。

まとめ

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

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

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

また、過去記事なども参考にしてください。

iOS development - Will feel Tips