search
LoginSignup
3

More than 5 years have passed since last update.

posted at

Theosを使ったMakefile

普段自分がTweakを作成するときは、Theosを使用してbuildしています。

Terminalから/opt/theos/bin/nic.plまたは$THEOS/bin/nic.plで何かしらの項目を選択すると、自動的に必要なファイルとMakefileが作成されます。

そのままでもいいのですが、自分がいつも使ってる方法を紹介します。

Sample

https://github.com/ichitaso/UIRotation9/blob/master/Makefile

Makefile
PACKAGE_VERSION = $(THEOS_PACKAGE_BASE_VERSION)
GO_EASY_ON_ME := 1
ARCHS = armv7 arm64
LDFLAGS = -Wl,-segalign,0x4000
THEOS_DEVICE_IP = 192.168.0.12

TWEAK_NAME = UIRotation9
UIRotation9_FILES = Tweak.xm UIRController.m
UIRotation9_FRAMEWORKS = Foundation UIKit QuartzCore
UIRotation9_PRIVATE_FRAMEWORKS = GraphicsServices
UIRotation9_LDFLAGS = -lactivator


BUNDLE_NAME = UIRotationSettings
UIRotationSettings_FILES = Preference.m
UIRotationSettings_INSTALL_PATH = /Library/PreferenceBundles
UIRotationSettings_FRAMEWORKS = UIKit Social
UIRotationSettings_PRIVATE_FRAMEWORKS = Preferences


SUBPROJECTS += UIRotationHelper
SUBPROJECTS += UIRotationSwitch


include $(THEOS)/makefiles/common.mk
include $(THEOS_MAKE_PATH)/tweak.mk
include $(THEOS_MAKE_PATH)/bundle.mk
include $(THEOS_MAKE_PATH)/aggregate.mk

internal-stage::
    $(ECHO_NOTHING)mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences$(ECHO_END)
    $(ECHO_NOTHING)cp entry.plist $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/UIRotation.plist$(ECHO_END)

before-package::
    sudo chown -R root:wheel $(THEOS_STAGING_DIR)
    sudo chmod -R 755 $(THEOS_STAGING_DIR)
    sudo chmod 644 $(THEOS_STAGING_DIR)/Library/Switches/UIRotation.bundle/*

after-install::
    install.exec "killall -9 SpringBoard"
    make clean
    sudo rm -rf ./*.zip
    sudo mv _ $(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm
    sudo rm -rf ./_
    zip -r $(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm.zip ./$(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm
    sudo rm -rf ./$(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm
    rm -rf .obj
    rm -rf obj
#   rm -rf .theos
#   rm -rf *.deb

先頭の行

PACKAGE_VERSION = $(THEOS_PACKAGE_BASE_VERSION)

こうすることによってTheosで作成したディレクトリ内のcontrolファイルに記載しているバージョンナンバーでコンパイルされます。

GO_EASY_ON_ME := 1

これを記載することによって足りない部分のコードでエラーが出てもMakeできるようになります。

最初は必要なヘッダーファイルなどを記載するのが面倒なので、記述しておくと楽です。

最終的にはMakeするときにエラーが無いようにします。

中盤

include $(THEOS)/makefiles/common.mk
include $(THEOS_MAKE_PATH)/xxx.mk

このように記述することによって、theosへのシンボリックリンクがなくても、.bash_profileに/opt/theosへのリンクを記述していればMakeできるようになります。

$THEOS=/opt/theos

before-package::

make packageでdebファイルへコンパイルする前にパーミッションと所有者を変更できます。

ただし、BigBossなどへ提出した場合は一度解凍されて独自のツールで再度パッケージを作成されるため、どうしてもパーミッションなどを残しておきたい場合はpostinstに記述しておきましょう。

after-install::

install.exec "killall -9 SpringBoard"
make clean
sudo rm -rf ./*.zip
sudo mv _ $(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm
sudo rm -rf ./_
zip -r $(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm.zip ./$(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm
 sudo rm -rf ./$(THEOS_PACKAGE_NAME)_$(THEOS_PACKAGE_BASE_VERSION)_iphoneos-arm
rm -rf .obj

このように記述することによって、BigBossやModmyiに提出する際、debファイルではなくzipで中身だけ送ることができるので、公式のリポ側で管理しやすくなるかと思います。

最初はzipの部分は消して、最終的に提出する際にzipで送るといいかと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3