上一篇文章简单说了一下使用Tweak开发一个简单的越狱工程,但是在MakeFile里面开发对于习惯了正向开发的程序员始终是觉得别扭,还好有iOSOpenDev和MacPort,才能够在XCode上愉快的进行越狱开发。
一、配置MacPort
1.从官网下载MacPort
找到对应于自己电脑系统版本的MacPort下载就行。
下载完成安装即可。
注意:版本下错了MacPort会安装不成功;
电脑以后有更新的话可以执行sudo port -v self update下载更新
【注意】macPort安装特别卡,一种解决办法是开启VPN,一种就是执行命令行,具体可以看这篇文章 。但是macPort不是必须安装,除非你需要执行port相关指令。
二、配置iOSOpenDev
1.从官网下载iOSOpenDev最新版本
或者使用命令
git clone -b stableversion https://github.com/haorenqq/theos/ $THEOS
下载兼容iosopendev的版本
2.配置相关文件
下载压缩包 解压得到几个文件
iPhoneOS开头的四个文件放到/应用程序/Xcode/Content/Developer/Platforms/IphoneOS.platform/Developer/Library/Xcode/Specifications文件夹下(如果没有,请自己创建一个),
iPhone Simulator 开头的另外四个文件放入/应用程序/Xcode/Content/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications文件夹下(如果没有,请同样创建一个)。
另外在/应用程序/Xcode/Content/Developer/Platforms/iPhoneSimulator.platform/Developer/文件夹下创建usr文件夹,usr文件夹下再创建一个名为bin的文件夹
3.如果安装失败 请继续以下步骤!
安装失败后,我们进入系统根目录的opt文件夹,会发现已经有了iosopendevsetup文件夹,我们在iosopendevsetup/bin看到有一个脚本iod-setup。终端运行
sudo ./iod-setup base
sudo ./iod-setup sdk -sdk iphoneos
完全关闭Xcode重新打开,新建工程,显示下图就成功了。
![](https://img.haomeiwen.com/i1609537/043cc915092d4367.png)
三、开始编程
1.选择上图中的LogosTweak
![](https://img.haomeiwen.com/i1609537/55db0eabea80b6af.png)
2.配置运行环境ip
![](https://img.haomeiwen.com/i1609537/5a0f52a6ca9eb552.png)
注:手机和电脑必须在同一个wifi下,上面输入自己手机的ip;
3.导入对应的系统库,最基础的库,UIKit和Foundation
点击+号搜索导入
![](https://img.haomeiwen.com/i1609537/a985fb4c349d4f14.png)
4.开发文件编辑
![](https://img.haomeiwen.com/i1609537/54987d3a39dcd9cd.png)
打开这个文件,是不是很眼熟,对,就是上一篇文章提到的Tweak开发。
注:你可以在这个文档里写代码,也可以在下面的.mm文件中写代码,删除.xm都没关系,因为写在xm里的代码在运行之后会在mm文件中自动生成对应的代码。但是在xm中编写代码并不会有XCode关联代码,所以在mm中写代码更爽。
5.下面代码都放在mm中[手机运行最先走的是这个方法]
#import <UIKit/UIKit>
#import <Foundation/Foundation.h>
#import <substrate.h>
static void (* original_applicationDidFinishLaunching)(id self, SEL _cmd, UIApplication * application);
static void replace_applicationDidFinishLaunching(id self, SEL _cmd, UIApplication * application)
{
original_applicationDidFinishLaunching(self,_cmd, application);
//在这里编码
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome" message:@"First Blood" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
//最先走这个方法
__attribute__((constructor)) static void _log_UIApplicationMain(){//initialize
MSHookMessageEx(objc_getClass("SpringBoard"), @selector(applicationDidFinishLaunching:), (IMP)&replace_applicationDidFinishLaunching, (IMP *)&original_applicationDidFinishLaunching);
}
6.编译运行
![](https://img.haomeiwen.com/i1609537/cf0244aace639c53.png)
或者使用快捷键commond+shift+i
注:一定要选择在真机下运行,不然会有报错,不在真机下运行的打包发到手机也没用。
如果都没有报错,恭喜你成功了。
7.常见报错处理。
问题:Undefined symbols for architecture arm64:"_OBJC_CLASS_$_UIAlertView", referenced from:objc-class-ref in firstTweak.o
解决方案:导入UIKit库文件,上面说过导库。
问题:Undefined symbols for architecture arm64:"_MSHookMessageEx", referenced from:_log_UIApplicationMain() in firstTweak.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方案:导入libsubstrate.dylib库文件【注意路径】
![](https://img.haomeiwen.com/i1609537/99b9f8501032b534.png)
![](https://img.haomeiwen.com/i1609537/14ccaecf4ea0decf.png)
![](https://img.haomeiwen.com/i1609537/5fb2f546377ef4af.png)
问题:CodeSign error: code signing is required for product type 'Dynamic Library' in SDK 'iOS 9.3'
解决方案:找到Xcode的安装目录【电脑中的应用程序右键显示包内容】目录:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/SDKSettings.plist拷贝出来,然后找到文件中的DefaultProperties属性中的CODE_SIGNING_REQUIRED设置为NO,拷贝回去替换掉。重启Xcode重新运行【Commond+Shift+i】。
注:一定要选择在真机下运行,不然会有报错,不在真机下运行的打包发到手机也没用。
![](https://img.haomeiwen.com/i1609537/8674fdacb43d83d8.png)
然后你就可以看到手机黑屏然后开启,然后就弹出框啦!First Blood!
如果还不行的话,下一篇文章将讲述另一种打包的方法,上面这个方法可能对一些机器不太适用,下面的文章屡试不爽,只是稍有点麻烦。由于篇幅问题,放在下一篇中。
参考文章:https://github.com/jackrex/FakeWeChatLoc
http://www.blogfshare.com/iosopendev.html
http://www.cnblogs.com/isItOk/p/5645292.html
站在巨人的肩膀上才有这些总结
菜鸟走向大牛,大家共同前进,如果觉得不错,请给个赞/关注。
一起交流学习,有问题随时欢迎联系,邮箱:383708669@qq.com
网友评论