【#1 プロジェクト作成編】脱獄したiOSデバイス用のTweakを作成する

4 min read読了の目安(約3700字

シリーズ目次

  • #0  準備編(2021/4/14更新)
  • #1  プロジェクト作成編(2021/4/14更新)  ←今ココ
  • #2.1 Flex系で関数とか色々みてみる編(まだ書いていない)
  • #2.2 実際にhookしてみる編(以下同文)
  • #3  設定画面を作る編
  • #4  アイコンを設定してみる編
  • #5.1 自分のレポジトリを作る編
  • #5.2 Tweakを配布する編

(あくまでも未執筆のものは予定なので、今後内容が変わる可能性があるので気をつけてください)
(そもそも続きを書かない可能性の方が大きいのであまり期待はしないでください)

この記事について

この記事は、前回の記事、準備編(2021/4/13更新)の続きとなっています。(が、Theosの環境設定が済んでいるなら読む必要はありません。)

プロジェクトを作成する

ターミナルを開き、プロジェクトを作成する親ディレクトリに移動します。
例) ~/Documents/myTweakに作りたい場合、~/Documentsに移動します

cd ~/Documents

ここで、前回エイリアスを作成した、theosを実行します。

theos

すると、ずらっと何かが出てきます。

今回は超簡易的な設定画面付きのTweakを作るので、iphone/tweak_with_simple_preferencesのテンプレートを選択します。
(今回は16だったので)16と入力しましょう。(Theosが更新されるとテンプレートが増える場合があるので、執筆時とは番号が違うかもしれません)

すると、次に画像のようにいくつか質問されるので、以下のように答えましょう。

Project Name (required): 自分の作るTweakの名前
Package Name [com.yourcompany.mytweak]: Tweakの識別ID(他と被らないもの)。例のように、自分のドメインがある場合などは、com.mydomainname.mytweaknameのようにするといいと思います。
Author/Maintainer Name [------]: 作成者(あなた)の名前。ニックネームでもなんでも。
[iphone/tweak_with_simple_preferences] MobileSubstrate Bundle filter [com.apple.springboard]: ここは入力せずそのままエンター
[iphone/tweak_with_simple_preferences] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: ここもそのままエンター

完了すると

Instantiating iphone/tweak_with_simple_preferences in mytweak/...
Done.

のように表示されます。

プロジェクトの設定

プロジェクトを作成できたら、VSCodeなどでプロジェクトを開きましょう。
プロジェクトを開くと、以下のようなファイルがあると思います。

生成されたファイルについて

それぞれのファイルの役割を説明していきます。

  • Preferences.plist:設定画面のUIを指定するファイル
  • control:Tweakの情報が記載されたファイル
  • Makefile:makeに必要な情報が記載されたファイル
  • [Tweak名].plist:(多分)hook対象を指定しているファイル。アプリを対象にする場合は、
{ Filter = { Bundles = ( "com.apple.springboard" ); }; }

{ Filter = { Bundles = ( "アプリのBundle ID" ); }; }

に変更します。

  • Tweak.x:これがTweakの挙動を決めるコードを書くところです。使用言語はObjective-CにTweak用として使うために色々と機能を付け足した、Logosを使用します。なので、多少Objective-Cの知識があると楽です。

Makefile

このままではコードを書いても、hookする対象によってはコンパイルで失敗してしまうことがあるので、Makefileに少し変更を加えます。

Makefile
- TARGET := iphone:clang:latest:7.0
+ TARGET := iphone:clang:11.2:11.2
INSTALL_TARGET_PROCESSES = SpringBoard

+ THEOS_DEVICE_IP = 192.168.xxx.xxx(脱獄端末のIPアドレス)

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = myTweak

myTweak_FILES = Tweak.x
myTweak_CFLAGS = -fobjc-arc

include $(THEOS_MAKE_PATH)/tweak.mk

通常のコンパイルには

make

を使い、deb化する際は

make package

リリース用にdebを作成する場合は、

make package DEBUG=0

と、デバッグをオプションをオフにするとリリース用にコンパイルされます。

make package install

とすると、THEOS_DEVICE_IPで指定したデバイスに自動でインストールしてくれます。ただし、脱獄端末でOpenSSHをインストールし、同じWi-Fiに繋ぐ必要があります。

初回実行時は、このように質問されるのでyesを選択してください。
その後、脱獄端末のパスワードの入力を求められます。(初期設定ならalpineです)
パスワードを正確に入力すると、自動でリスプリングまでやってくれます。

また、makeすると、プロジェクトファイルの直下にpackagesフォルダが作成され、作成されたdebはそこに入ります。

おわり

これでプロジェクトの作成は完了です。
間違っているところがあったら教えてください。

参考文献

https://zunda-hack.com/2020:07/20/how-to-use-theos-for-ready/
https://zunda-hack.com/2020:07/21/how-to-use-theos-for-build/
https://tkgstrator.work/?p=1054#Makefile
https://gitra1n.com/Mojave/CustomNoOlderNotifications220/src/branch/master/Makefile
https://www.reddit.com/r/jailbreakdevelopers/comments/cvcud6/how_do_i_switch_theos_to_release_mode/

前の記事

次の記事

まだありません...