07-theos的安装、使用以及相关问题

一、安装签名工具ldid

  • 先确保安装了brew

    $  /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  • 利用 brew 安装 ldid

    $ brew install ldid
    

二、修改环境变量

  • 编辑用户的配置文件

    $ vim ~/.bash_profile
    
  • 在.bash_profile文件后面加入配置信息

    • 说明::代表和的意思, 可以用 echo $PATH 打印配置信息
    export THEOS=/opt/theos
    export PATH=$THEOS/bin:$PATH
    
  • .bash_profile 配置信息的环境变量立即生效(或者重新打开终端)

    $ source ~/.bash_profile
    

三、下载theos

  • 建议在$THEOS目录下载代码(也就是刚才配置的/opt/theos目录)
  • 建议使用git clone方式, 因为这个项目包含一些相关的子项目,使用--recursive可以递归下载
    $ git clone --recursive https://github.com/theos/theos.git $THEOS
    

四、新建tweak项目

  • cd到一个存放项目代码的文件夹(比如 桌面)

    $ cd ~/Desktop
    $ nic.pl
    
  • 选择[11.] iphone/tweak
    图片

  • 填写项目信息

    • Project Name
      • 项目名称
    • Package Name
      • 项目ID (随便写)
    • Author/Maintainer Name
      • 作者
      • 直接敲回车按照默认做法就行(默认是Mac上的用户名)
    • [iphone/tweak] MobileSubstrate Bundle filter
      • 需要修改的APP的Bundle ldentifier (喜马拉雅FM的是com.gemd.iting)
      • 可以通过Cycript查看 APP的Bundle ldentifier
    • [iphone/tweak] List of applications to terminate upon installation
      • 直接敲回车按照默认做法就行
        在这里插入图片描述

五、编辑Makefile

  • 在前面加入环境变量,写清楚通过哪个IP和端口访问手机
    • THEOS_ DEVICE_ IP
    • THEOS_ DEVICE_ PORT图片
  • 如果不希望每个项目的Makefile都编写IP和端口环境变量,也可以添加到用户配置文件中
    • 编辑完毕后,$ source ~/.bash_ _profile让配置生效 (或者重启终端)
      在这里插入图片描述

六、编写代码

  • 打开Tweak.xm文件
    在这里插入图片描述

七、编译-打包-安装

  • 编译

    make
    
  • 打包成deb

    make package // 包含了make编译的操作了
    
  • 安装(默认会自动重启SpringBoard)

    make install
    

八、可能遇到的问题

8.1 make的错误

图片

  • 是因为多个xcode导致路径(有 可能安装了好几个Xcode), 需要指定一下Xcode
    在这里插入图片描述
    在这里插入图片描述
  • 是因为之前已经编译过,有缓存导致的,clean一下即可
$ make clean
$ make

在这里插入图片描述

  • Any relevant logs, error output, etc?
xcrun: error: unable to find utility "llvm-dsymutil", not a developer tool or in PATH
  • Where has this been tested?

    • Operating System: macOS Mojave 10.14.4
    • Platform: macOS
    • Target Platform: iOS
    • Toolchain Version: Xcode 10.2
  • [darwin] Fix the handling of detecting llvm-dsymutil vs dsymutil.

    • Xcode 10.2 removed llvm-dsymutil for some reason, so when we checked for
      llvm-dsymutil with xcrun -f llvm-dsymutil, an error was being printed.
  • solution

8.2 make package的错误

在这里插入图片描述

  • 是因为打包压缩方式有问题,改成gzip压缩就行
    • 修改dm.pI文件, 用#号注释掉下面两句
      图片
    • 修改deb.mk文件第6行的压缩方式为gzip
      图片
      在这里插入图片描述
  • solution
    • 包名中不能含有特殊字符_
    • 在这里插入图片描述

九、theos资料查询

  • 目录结构: https://github.com/theos/theos/wiki/Structure
  • 环境变量: http://iphonedevwiki.net/index.php/Theos
  • Logo语法: http://iphonedevwiki.net/index.php/Logos
    • %hook. %end : hook一个类的开始和结束
    • %log : 打印方法调用详情
      • 可以通过Xcode -> Window -> Devices and Simulators査看日志
    • HBDebugLog : 跟NSLog类似
    • %new : 添加一个新的方法
      • 如果发现还是报错, 那就需要先声明一下方法
        在这里插入图片描述
    • %c(className) : 生成一个Class对象, 比如%c(NSObject), 类似于
      NSStringFromClass(). objc_getClass()
    • %оrіg : 函数原来的代码逻辑
    • %ctor : 在加载动态库时调用
    • %dtor : 在程序退出时调用
    • logify.pl : 可以将一个头文件快速转换成已经包含打印信息的xm文件
      logify.pl xx.h > XX.xm
      
  • 如果有额外的资源文件(比如图片),放在项目的layout文件夹中,对应着手机的根路径/

十、logify.pl注意点

  • logify.pl生成的xm文件,有很多时候是编译不通过的,需要进行一些处理
    • 删掉__weak
    • 删掉inout
    • 删掉协议,比如
      • 或者声明一下协议信息@protocol XXTestDelegate
    • 删掉 - (void).cxx_destruct { %log; %orig; }
    • 删除 HBLogDebug(@" = 0x%x’ , (unsigned int)r);
    • 替换类名为 void, 比如将 XXPerson * 替换为 void *
      • 或者声明一下类信息@class XXPerson
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值