[THEOS] 環境を整えよう

THEOSとは

脱獄tweakを開発するための環境のこと。

GitHubで最新の導入記事か書かれていたのでそちら向けにアップデートしました。

Installation

少し長いですが、脱獄Tweakを開発しようという意図があるレベルまでコンピュータの知識がある方なら迷うところなく進められると思います。

Xcode

ビルドにXcodeが必要なのでまずはXcodeをインストールします。

Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrewをインストールしてからldidとxzをインストールします。

brew install ldid xz

THEOS

アップデートでものすごく簡単になっていました。

echo "export THEOS=~/theos" >> ~/.profile
source .bash_profile

パスを設定します。

sudo git clone --recursive https://github.com/theos/theos.git $THEOS

GitHubから最新のTHEOSをクローンしたら準備は完了です。

THEOSのアップデート

しっかりと設定ができていれば以下のコマンドでTHEOSのアップデートが行なえます。

$THEOS/bin/update-theos

もしも以下のようなエラーがでた場合は古いバージョンのTHEOSのなので再インストールしましょう。

make: *** No rule to make target 'update-theos'.  Stop.

まとめ

以前はMacPortをインストールしたりとかghostをインストールしたりとかでややこしかったのですが、だいぶ手順が簡略化された印象があります。

記事は以上。

アプリの作成

さて準備ができたところで早速脱獄アプリを作っていきましょう。

個人的には広告を非表示にする機能をつけたいので、アプリというよりはtweakになります。

こっちの方が簡単なので、個人的にも好都合ですね。

プロジェクトを作成

まずは以下のコマンドで作成のためのツールを呼び出します。

$THEOS/bin/nic.pl
------------------------------
[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

するとどんなものを作成するかきかれます。ここではtweakを作るので11を選びます。

Project Name (required): ikawidget2
Package Name [com.yourcompany.ikawidget2]: work.tkgstrator
Author/Maintainer Name [Asano Kazuna]: Tkgling

プロジェクト名とパッケージネームを決めます。パッケージネームはURLを逆にしたものを使うのが普通だとか。

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: 

ここはEnterを連打で良いとかなんとか。

コードを書いてみる

今回は何かを非表示にするというコードを書きたいので、以下のページを参考にすることにしました。

ただし、書かれているのが少々古いのでうまく使えるかどうかば微妙です。

基本的にコピペするだけなので、リンク先を参照してください。

※今回は特にコピペもしてません(あかん)

Makefile

なんでこれでいいのかわからないんですが、こういうのが書いてあったのでとりあえず真似してみる感じ。

ARCHS = armv7 arm64
THEOS_DEVICE_IP = 192.168.xxx.xxx(IP address)
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = ikawidget2
Test_FILES = Tweak.xm
Test_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"

注意点

make
xcrun: error: SDK "iphoneos" cannot be located
==> Error: You do not have an SDK in /Library/Developer/CommandLineTools/Platforms/iPhoneOS.platform/Developer/SDKs or /opt/theos/sdks.
make: *** [before-all] Error 1

こういうエラーがでて躓いてしまった。悪戦苦闘していたのだが、issueで解決済みだったので実践したらあっという間に解決した。やはりこういうのは英語で調べるに限ります。
https://github.com/theos/theos/issues/255

sudo xcode-select -switch /Applications/Xcode.app

どうもXcodeを正しく認識していなかっただけのようだ。

適当にmakeしてみる

とりあえず何も書いていないコードなのだが、makeしてみるとこうなった。

make
2018-03-23 20:15:33.652 xcodebuild[8115:71899] [MT] PluginLoading: Required plug-in compatibility UUID B395D63E-9166-4CD6-9287-6889D507AD6A for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/XVim2.xcplugin' not present in DVTPlugInCompatibilityUUIDs
> Making all for tweak ikawidget2…
==> Warning: No files to link. Please check your Makefile! Make sure you set ikawidget2_FILES (or similar variables)
==> Linking tweak ikawidget2 (armv7)…
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7 [-Wdeprecated]
==> Generating debug symbols for ikawidget2 (armv7)…
warning: no debug symbols in executable (-arch armv7)
==> Warning: No files to link. Please check your Makefile! Make sure you set ikawidget2_FILES (or similar variables)
==> Linking tweak ikawidget2 (arm64)…
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7 [-Wdeprecated]
==> Generating debug symbols for ikawidget2 (arm64)…
warning: no debug symbols in executable (-arch arm64)
==> Merging tweak ikawidget2…
==> Signing ikawidget2…

今回はメインテーマはセットアップだったので、実際の動作確認等は次の記事で実践したいところである(将棋ソフトはどうした)

おまけ

なんだかmakeが正しく成功しない場合があるので、その時は

sudo cpan IO::Compress::Lzma

としてあげるとよい。

参考:https://github.com/theos/theos/issues/273#issuecomment-351310010