LoginSignup
3

More than 5 years have passed since last update.

普段自分が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
  3. You can use dark theme
What you can do with signing up
3