IOS 命令行工具开发
例子 我们需要查看手机APP里面的某个应用的架构
新建一个Single View App 的ios项目 ToolCL
然后在 main函数中加入以下代码
//
// main.m
// ToolCL
//
// Created by zsj on 2018/8/10.
// Copyright © 2018年 ITpower. All rights reserved.
// #import <UIKit/UIKit.h>
#import <mach-o/loader.h>
#import <mach-o/fat.h> /**
@param argc 入参个数
@param argv 入参数组 argv【0】为可执行文件路径
*/
int main(int argc, char * argv[]) {
@autoreleasepool {
if(argc== ){
printf("-l 查看MachO信息\n");
return ;
} if (strcmp(argv[], "-l")!=) {
printf("-l 查看MachO信息\n");
return ;
}
//优酷视频APP 的mach-o文件的地址
NSString *path = @"/private/var/mobile/Containers/Bundle/Application/72B419F5-0200-48D7-964C-20954B77E00B/Youkui4Phone.app/Youkui4Phone";
NSFileHandle *handle=[NSFileHandle fileHandleForUpdatingAtPath:path]; int length= sizeof(uint32_t);
//读取前面4个字节(magic\number\魔数用来标识文件类型)
NSData *magicData=[handle readDataOfLength:length];
//魔数 文件类型
uint32_t magicNumber;
[magicData getBytes:&magicNumber length:length];
if (magicNumber==FAT_CIGAM ||magicNumber==FAT_MAGIC) {
printf("FAT文件\n");
}else if (magicNumber==MH_MAGIC || magicNumber==MH_CIGAM){
printf("非64bit架构文件\n");
}else if (magicNumber==MH_MAGIC_64 || magicNumber==MH_CIGAM_64){
printf("64bit架构文件\n");
}else{
printf("读取失败");
}
printf("magicNumber=0X%x\n",magicNumber);
[handle closeFile];
return ;
}
}
然后选择Release 真机编译 不选择真机执行命令会报下面的错误
找到可执行文件 找到手机系统的SpringBoard 将它的权限导出 然后赋值个刚刚生成的可执行文件
然后将可执行文件放入手机的user/var/bin 目录下 然后给可执行文件赋予执行权限 chmod +x /usr/bin/ToolCL
至此命令工具类就开发完毕了
可能出现的问题 如果出现 Killed: 9 每次将可执行文件删除再放入新的即可解决
IOS 命令行工具开发的更多相关文章
- 用PHP开发命令行工具
介绍 用过laravel开发过项目的都应该用过artisan,通过artisan我们可以在命令行中创建控制器类,Eloquent类等,今天我们将通过php来开发命令行工具 开发环境与工具 使用vagr ...
- [原创]使用命令行工具提升cocos2d-x开发效率(一)之TexturePacker篇
TexturePacker是一个常用的制作sprite sheet的工具,它提供了很多实用的功能. 一般我们制作sprite sheet都是使用他的gui版本,纯手工操作,就像下面这张图示的一样. 刚 ...
- Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- APICloud提供适用于命令行的开发工具,开发更具极客精神!
APICloud近期大动作不断,上周刚刚支持Atom编辑器,并推出核心开发工具库.本周又为开发者提供了一款超轻便的新开发工具--CLI工具! 操作系统: Mac/Windows/Linux nodej ...
- Apache Commons CLI 开发命令行工具示例
概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提 ...
- Go使用flag包开发命令行工具
flag包是Go语言标准库提供用来解析命令行参数的包,使得开发命令行工具更为简单 常用方法 1.flag.Usage 输出使用方法,如linux下ls -h的帮助输出 2.flag.Type(参数名, ...
- 【Nodejs】326- 从零开发一个node命令行工具
本文由 IMWeb 社区授权转载自腾讯内部 KM 论坛.点击阅读原文查看 IMWeb 社区更多精彩文章. 什么是命令行工具? 命令行工具(Cmmand Line Interface)简称cli,顾名思 ...
- 来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具
源代码地址: Github仓库地址 个人网站:个人网站地址 前言 不知道你是否有过这样的经历.不管你是什么岗位,前端也好,后端也罢,想去了解一下Java开发到底是什么样的,它是不是真的跟传说中的一样. ...
- [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇
如果你正在使用CocosBuilder或者是其他基于CocosBuilder源码改装而成的工具为你的游戏搭建场景或者UI,那你一定要看看这篇文章:) 你是否已经厌倦了无聊的手工publish操作? ...
随机推荐
- php serialize(),unserialize()
序列化serialize()与反序列化unserialize(): 序列化serialize():就是将一个变量所代表的 “内存数据”转换为“字符串”的形式,并持久保存在硬盘(写入文件中保存)上的一种 ...
- java 通过域名获取ip
1. java InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com"); 2. nslookup
- 第26月第8天 android studio 国内
1. //东软信息学院 mirrors.neusoft.edu.cn 80 使用方法: 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options…」,弹 ...
- app-web 开发 追溯debug
1.iphone5 运行vue项目时,方法格式:fun(){}这种格式容易不显示页面 2.vue未绑定上数据有可能是js文本过大,手机内存不足引起的 3.根据方法走向追溯debug 4.一定要用try ...
- mysql 原理 ~ 死锁问题
一 锁1 锁的定义 1 按照宏观角度 共享锁[S锁] 又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的 ...
- JAVA9大隐式对象
- 修复服务器上出现ImportError: cannot import name main的问题
在服务器上成功升级pip2之后再运行pip2命令出现如下报错信息 Traceback (most recent call last): File "/usr/bin/pip2.7" ...
- 20165221—JAVA第六周学习心得
课本知识点小结 第8章:常用实用类 String类 常量对象放入常量池中,而用string声明的对象变量中存放着引用.凡是new构造的常量都不在常量池中. startIndex表示提取字符的起始位置, ...
- C++如何禁止对象的复制操作
最容易想到的是将拷贝构造函数与赋值函数声明为private.但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数与友元函数对其访问.那么怎么办呢? ---->在类中,允许声明 ...
- 百度echarts样式开发
Echarts如何进行实例化 var a1 = null; a1= echarts.init(document.getElementById('a1')); a1.setOption({ color: ...