标签:
THEOS的第一个TWeak的成功创建参考资料:成功的创建一个TWeak的弹出步骤1:安装Xcode和Xcode command line步骤2:安装theosa:下载theos前,设置保存的路径:环境变量b:下载theosc:下载头文件d:下载ldid签名工具e:配置MoblieSubstrate环境f:安装dpkg步骤3:开始编写Teak应用a 创建工程b.更改Tweak.xm文件c.编写makfiled: 编译,安装,运行步骤4: 证书设置(不用多次输入密码)总结一些坑
TWeak的成功创建也不是一件容易的事情.
Xcode的安装直接去Apple官网上去下载就好了.command line的话,现在的Xcode(2015-09-20,都是Xcode7了,Xcode6开始已经集成了command line到Xcode中了).
网上的教程有的是使用的Xcode4,5,等低版本.
这里埋下了一个坑.
theos保存到哪里?这个路径是需要设置为环境变量的
可以直接写到~/.bash_profile中(设置环境变量的一般方法)
export THEOS=/usr/local/iOSTools/theos
网上很多的人都安装到了/opt/theos路径下,不过这个路径随意了,看你一般的开发工具放在哪里,就写那里就好了.
设置好后可以echo $theos来查看设置的环境变量是否设置好了.
zx:iOSTools zx$ echo $THEOS
/usr/local/iOSTools/theo
下载的方法很多
svn co http://svn.howett.net/svn/theos/trunk $THEOS
git clone git://github.com/DHowett/theos.git $ THEOS
当然了,也可以直接去git仓库里下载一份压缩的,将里面的内容解压到$THEOS
头文件下载下来后需要做一些更改.
# clone iphoneheaders.git git clone git://github.com/rpetrich/iphoneheaders.git mv iphoneheaders/* theos/include/ cp /System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceAPI.h theos/include/IOSurface
如果没有拷贝和注释这两个步骤,最后会导致打包失败.
# get ldid for Mac OS X
cd ~/theos/bin
curl -O http://dl.dropbox.com/u/3157793/ldid
chmod a+x ldid
这里的文件是在dropbox上,需要什么你的懂的.
所以,这里也提供一个百度盘上下载地址:
http://pan.baidu.com/s/1kTHoIGZ
注:我把这个工具下载下来放到了http://pan.baidu.com/s/1kTHoIGZ,也可以从这里下载,然后给它添加执行权限(chmod +x ldid)并移动到$THEOS/bin/这个目录下。(from http://security.ios-wiki.com/issue-3-6/)
PS.当然了,你可以直接从源码编译安装,下面是源码仓库
https://github.com/rpetrich/ldid
方法一:
# get libsubstrate.dylib substrate.h cd ~/theos curl -OL http://apt.saurik.com/debs/mobilesubstrate_0.9.3366-1_iphoneos-arm.deb dpkg-deb -x mobilesubstrate_0.9.3366-1_iphoneos-arm.deb mobilesubstrate cp mobilesubstrate/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate ~/theos/lib/libsubstrate.dylib cp mobilesubstrate/Library/Frameworks/CydiaSubstrate.framework/Headers/CydiaSubstrate.h include/substrate.h
(from http://www.tuicool.com/articles/Bf2UFb)
方法二:
将iOS上的“/Library/Frameworks/CydiaSubstrate.framework/ CydiaSubstrate”拷贝到OSX中,将其重命名为libsubstrate.dylib后放到“/opt/theos/lib/libsubstrate. dylib”中
(from http://book.51cto.com/art/201504/472934.htm)
方法三:
方法一:
mac port也就是一个软件包管理工具,像weget,apt-install,brew等工具类似.
首先我尝试安装的是https://www.macports.org/install.php下的https://distfiles.macports.org/MacPorts/MacPorts-2.3.3-10.10-Yosemite.pkg
但是安装卡顿,失败.
然后,尝试源码编译安装,
“cd” into the directory where you downloaded the package and run “tar xjvf?MacPorts-2.3.3.tar.bz2” or “tar xzvf?MacPorts-2.3.3.tar.gz”, depending on whether you downloaded the bz2 tarball or the gz one, respectively.
Build and install the recently unpacked sources:
- cd MacPorts-2.3.3
- ./configure && make && sudo make install
Optionally:
- cd ../
- rm -rf MacPorts-2.3.3*
(from https://www.macports.org/install.php)
但是
sudo port selfupdate sudo port install dpkg
这里 时候,我的时候,根本不动了,毛网速没有啊....
方法二:
brew的作者最近不是去了apple了吗?哈哈,以前配置号brew后,来下载就方便多了.
brew install dpkg
不到1分钟就可以下载好了. 真是给方法一给跪了.
选一个目录,存放工程.
zx:theosCode zx$ pwd
/Users/zx/documents/theosCode
?
zx:theosCode zx$ $THEOS/bin/nic.pl
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/application
[2.] iphone/library
[3.] iphone/preference_bundle
[4.] iphone/tool
[5.] iphone/tweak(选这个)
Choose a Template (required): 5
Project Name (required): zxtest
Package Name [com.yourcompany.zxtest]: com.z2xy.zxtext(可选项,按enter,[]中的作为默认值)
Author/Maintainer Name [zx]: zx(按enter,[]中的作为默认值)
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.apple.springboard(按enter,[]中的作为默认值)
[iphone/tweak] List of applications to terminate upon installation (space-separated, ‘-‘ for none) [SpringBoard]: SpringBoard(按enter,[]中的作为默认值)
Instantiating iphone/tweak in zxtest/...
Done.
生成后的文件列表如下:
xzx:zxtest zx$ pwd
/Users/zx/documents/theosCode/zxtest
?
zx:zxtest zx$ tree
.
├── Makefile
├── Tweak.xm
├── control
├── theos -> /usr/local/iOSTools/theos/
└── zxtest.plist
?
1 directory, 4 files
其中:
x#import <SpringBoard/SpringBoard.h>
?
%hook SpringBoard
?
-(void)applicationDidFinishLaunching:(id)application {
%orig;
?
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"__z2xy__"
message:@"from zxdev"
delegate:nil
cancelButtonTitle:@"取消" otherButtonTitles:@"好的",nil];
?
[alert show];
[alert release];
?
}
?
%end
上面引入了一个头文件,然后替换了**applicationDidFinishLaunching方法的实现.
一些语法 %hook,%orig,%end,倒是很像django的模板语法.
这里不详细讲,见上的参考资料.
xxxxxxxxxx
ARCHS = armv7
THEOS_DEVICE_IP = 192.168.0.120 //(可选)
zxtest_FRAMEWORKS = UIKit
?
include theos/makefiles/common.mk
?
TWEAK_NAME = zxtest
zxtest_FILES = Tweak.xm
?
include $(THEOS_MAKE_PATH)/tweak.mk
?
after-install::
install.exec "killall -9 SpringBoard"
?
主要是添加了头三行.
查看iOS设备的ip地址的话,直接到手机的设置,wifi,连接 wifi下查看就可以了.
如果需要自动安装的话,可以去掉这行
如果不导入文件编译出错,找不到符号,因为我们使用了UIKit中的UIAlertView.
方法一:
需要指定iOS设备ip地址,需要设置好信任的证书.
zx:zxtest zx$ make package install
Making all for tweak zxtest...
make[2]: Nothing to be done for `internal-library-compile‘.
Making stage for tweak zxtest...
dpkg-deb: building package `com.z2xy.zxtext‘ in `./com.z2xy.zxtext_0.0.1-1_iphoneos-arm.deb‘.
install.exec "cat > /tmp/_theos_install.deb; dpkg -i /tmp/_theos_install.deb && rm /tmp/_theos_install.deb" < "./com.z2xy.zxtext_0.0.1-1_iphoneos-arm.deb"
Selecting previously deselected package com.z2xy.zxtext.
(Reading database ... 4989 files and directories currently installed.)
Unpacking com.z2xy.zxtext (from /tmp/_theos_install.deb) ...
Setting up com.z2xy.zxtext (0.0.1-1) ...
install.exec "killall -9 SpringBoard"
方法二:
zx:zxtest zx$ make
Making all for tweak zxtest...
Preprocessing Tweak.xm...
Compiling Tweak.xm...
Linking tweak zxtest...
Stripping zxtest...
Signing zxtest...
zx:zxtest zx$ make package
Making all for tweak zxtest...
make[2]: Nothing to be done for `internal-library-compile‘.
Making stage for tweak zxtest...
dpkg-deb: building package `com.z2xy.zxtext‘ in `./com.z2xy.zxtext_0.0.1-2_iphoneos-arm.deb‘.
xzx:zxtest zx$ scp com.z2xy.zxtext_0.0.1-2_iphoneos-arm.deb root@192.168.0.120:/var/root/
com.z2xy.zxtext_0.0.1-2_iphoneos-arm.deb 100% 2270 2.2KB/s 00:00
当然了,可以使用各种工具将此deb文件上传到设备中,上面使用的是scp.
第一个参数是本地文件路径,第二参数目的路径
root@192.168.0.120指定了同一局域下的iOS设备,/var/root/指定的设备中的路径,中间有一个冒号连接.
如果上面的步骤错误的话,
ununderstood data nember data.tar.xz
参考: http://stackoverflow.com/questions/21013325/dpkg-error-contains-ununderstood-data-member,打包的时候,压缩的方式和iOS设备上解压缩的方式不一致导致的错误.
方式是,替换$THEOS/makefiles/package/deb.mk文件中
$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r dpkg-deb -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)" $(STDERR_NULL_REDIRECT)$(ECHO_END)
为:
$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r dpkg-deb -Zgzip -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)" $(STDERR_NULL_REDIRECT)$(ECHO_END)
可以看到第一中方法简便了不少,只需要指定iP地址和完成证书配置就可以一行命令搞定.
从~/.ssh/known_hosts
xxxxxxxxxx
192.168.0.120 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvTS9W8/88Z+9j2D/TBft/ns173ssWhBGQgMyBnSAzIdhmfVd830aq2/78MgKyadyGxD6xhF/LG9tP5ZshaeZB9 XjBjQnEtB0gTZjiyGJpBWFdXCLX/uxV35gwZnu11Ts/HQzdC4+n+eh9pqKR7vsaJP/gIiYqfz/oDchlHrf7bdicZ0yKFlOpilTP4WLgPz2Qqr96xGcn/3dwimFTuye5zAqqfUApjTS/ idKvJNOEsFo6lVkuyOmkbItTjp6MfQliNorOY8nvV0DRFx2+lmedRjtq6UNPTyjuLPx3ymZIg/uOazvB0CHs/Ta2kMZRe1bPl8VcHI5/AbL0i7VHQB1p
$ssh-keygen -t rsa
如果已经生成过整数,直接得到~/.ssh/id_ras.pub 公钥就可以了.
ssh登录到iOS设备,生成证书就可以了
xxxxxxxxxx
$ssh root@192.168.0.120
zxde-iPhone:~ root# ssh-keygen
zxde-iPhone:~ root# ls -la
drwx------ 2 root wheel 170 Sep 20 22:34 .ssh/
scp ~/.ssh/id_rsa.pub root@192.168.0.120:/var/root/.ssh/
通过上面 的证书配置和iOS设备配置,
只需要方法一的一行
$make package install
就可以实现,编译,打包,上传到设备,安装deb包,运行.
ununderstood data nember data.tar.xz
参考http://stackoverflow.com/questions/21013325/dpkg-error-contains-ununderstood-data-member就好了.
其实,有些问题在http://www.iphonedevwiki.net/index.php/Theos/Getting_Started 中已经给出了很好的回答
只是最开始没有看.
—
最后,"步骤4: 证书设置(不用多次输入密码)”,使用后,方便了很多.
最后的最后,这里还有一些列相关的资料:
标签:
原文地址:http://www.cnblogs.com/xilifeng/p/4824872.html