【脱獄アプリ開発】第8回armv6からarm64(iPhone 3Gから5s)に対応したTweakの作成

2014/04/04 21:00

連載シリーズ第8回目となる今回は、今では懐かしいiPhone 3Gから現行機種のiPhone 5sまでに対応したJailbreak Tweakの作成方法を紹介いたします。


作成する方法は前回紹介した「Theos」を使った方法です。

【脱獄アプリ開発】第7回theosのインストールから簡単なTweakの作成までのガイドライン

Xcodeのインストール

現在の最新バージョンは、Xcode 5.1となっておりiOS 7.1 SDKが使われています。しかし現状Jailbreakできるのは、iOS 7.0.6までなのでXcode 5.0.2を使用します。

古いXcodeをDownloadするにはDeveloper登録が必要になるので登録します。
(iOSアプリのDeveloper登録ではないので無料です)
Xcode 4 Downloads and Resources – Apple Developer


DownloadタブからAdditional Toolsの「View downloads >」をクリックし以下のものをDLします。
  • Xcode 5.0.2
  • Xcode 4.4.1
  • Command Line Tools(OSに合ったもの)
はじめにXcode 4.4.1を「Xcode_4.4.1.app」とリネームしApplicationsフォルダに入れます。その後、Xcode 5.0.2をApplicationsフォルダに入れて下さい。

Xcode 5.0.2をARMv6に対応させる

具体的に言うとXcode 5.0.2はアーキテクチャがARMv7以降しか対応していないため、iPhone 3GやiPod touch 3G以前の古い機種で使われているARMv6には対応していません。

参考:iPhone – The iPhone Wiki

そのままですとTheosでコンパイルする際、Makefileに「ARCHS = armv6」と記述するとエラーが出てビルドできません。それを修正するため「Xcode 4.4.1」を利用してARMv6にも対応させるのが今回の目的です。




iPhone Development Wiki」で紹介されている方法を用いて修正します。

ターミナルを開いて以下のコマンドを入力します。

cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.0/lib/darwin/
mv libclang_rt.ios.a libclang_rt.ios-7.0.a
lipo -thin armv6 -output libclang_rt.ios-5.1.a /Applications/Xcode_4.4.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.0/lib/darwin/libclang_rt.ios.a
lipo -create -output libclang_rt.ios.a libclang_rt.ios-5.1.a libclang_rt.ios-7.0.a
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/
mv dylib1.o dylib1-7.0.o
lipo -thin armv6 -output dylib1-5.1.o /Applications/Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/dylib1.o
lipo -create -output dylib1.o dylib1-5.1.o dylib1-7.0.o
mv crt1.o crt1-7.0.o
lipo -thin armv6 -output crt1-5.1.o /Applications/Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/crt1.o
lipo -create -output crt1.o crt1-5.1.o crt1-7.0.o
mv crt1.3.1.o crt1-3.7.o
lipo -thin armv6 -output crt1.5.1.o /Applications/Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/crt1.3.1.o
lipo -create -output crt1.3.1.o crt1.5.1.o crt1-3.7.o
Gist:How to compile for ARMv6 and ARM64

Makefileの記述

Makefileの先頭に以下のように記述することで『armv6からarm64』までに対応したものがコンパイルされます。

TARGET := iphone:clang
TARGET_IPHONEOS_DEPLOYMENT_VERSION = 3.0
TARGET_IPHONEOS_DEPLOYMENT_VERSION_arm64 = 7.0
ARCHS = armv6 armv7 arm64
実際にarmv6からarm64に対応したTweak:a3tweaks/Flipswitch
こちらはTweakを作成するときの参考にもなるかと思うので、目を通してみてください。

RemoveAdsToggle v1.1-7で今回の方法を使用しました。もし何か問題がありましたらコメントなどで教えていただければと思います。でわでわ!!