2015-08-25 16:57:34 miaopasi_QAQ 阅读数 1476

在pc上,无论是windows还是linux都可以连接管理你的ios设备,那么如何去实现在arm平台下与ios通信呢,其实你你需要把linux下的usbmuxd和libimobiledevice交叉编译就可以了,管道就打通了,接下你也可以用ssh或ifuse。

编译环境:

系统:Linux  2.6.32-74-generic #142-Ubuntu SMP i686 GNU/Linux
交叉编译器: arm-none-linux-gnueabi-gcc
RDK: DVRRDK_04.00.00.03(没有这个可以根据需要编译自己需要的库)

设备: arm linux板(dm368)+ ipone5s(ios8.3) +usb线

编译步骤

环境配置


 export PREFIX=/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr
export HOST=arm-none-linux-gnueabi
export BUILD=x86_64-unknown-linux-gnu
export LD_LIBRARY_PATH=$PREFIX/lib

export PKG_CONFIG_PATH=$LD_LIBRARY_PATH/pkgconfig

libusb

Package: libusb-1.0.8.tar.bz2

a. 先声明上面的环境


b. ./configure --build=$BUILD --host=$HOST --prefix=$PREFIX --disable-static --disable-log

c. make

d.make install

libplist

Package: libplist-1.3.tar.bz2

这个需要用cmake编译,自己写一个toolchain.cmake 修改交叉编译变量


# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
*(--转载请注明出处,其他用途请联系mail:ren_yongke@163.com)*
# specify the cross compiler
SET(CMAKE_C_COMPILER   /opt/arm-2009q1/bin/arm-none-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER  /opt/arm-2009q1/bin/arm-none-linux-gnueabi-g++)

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH  /opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

然后在源码目录下 新建build文件夹

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..  
make DESTDIR=$PREFIX install

usbmuxd

Package: usbmuxd-1.0.4.tar.bz2

编译方法和libplist是一样的。

现在通道已经打通。

后续

采用上面的方法,你也可以编译出
libgpg-error

Package: libgpg-error-1.7.tar.gz

libgcrypt

Package: libgcrypt-1.4.6.tar.gz

libtans1

Package: libtasn1-2.7.tar.gz

gnutls

Package: gnutls-2.8.6.tar.bz2
需要修改一下src/makefile 的LDFLAGS 值

LDFLAGS=/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr/lib/libgcrypt.so /opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr/lib/libgpg-error.so

libimobiledevice

新建一个build.sh

./configure --build=$BUILD --host=$HOST --prefix=$PREFIX  libusbmuxd_CFLAGS="-I$PREFIX/include" libusbmuxd_LIBS="-L$PREFIX/lib" libgnutls_CFLAGS="-I$PREFIX/include" libgnutls_LIBS="-L$PREFIX/lib" libtasn1_CFLAGS="-I$PREFIX/include" libtasn1_LIBS="-L$PREFIX/lib" libplist_CFLAGS="-I$PREFIX/include" libplist_LIBS="-L$PREFIX/lib" libglib2_CFLAGS="-I$PREFIX/include -I$PREFIX/lib/glib-2.0/include" libglib2_LIBS="-L$PREFIX/lib" --without-swig LDFLAGS="-L/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr/lib -L/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr/usr/local/lib -lusbmuxd " CFLAGS="-I/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr/usr/local/include -I/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr/include"
sh build.sh
make

make install

也许你需要继续 编译fuse 和ifuse ,那么你就可以去mount ios设备了

文章参照 Mounting an iPod/iPhone on a Linux device http://paguilar.org/?p=31

补充说明

上面usbmuxd的1.0.4版本不支持ipone5s 的ios8.3,又试了usbmuxd 1.0.7 是ok的。
我只使用了发现设备连接设备(libplist usbmuxd),打通管道,你也可以编译文章提到的其他工具,甚至写个qt程序。

–转载请注明出处,其他用途请联系mail:ren_yongke@163.com

2018-01-27 10:41:30 wnma3mz 阅读数 3024

关于 libimobiledevice的介绍

libimobiledevice可以简称为libiphone,是IOS开发的神器。上一篇博客我介绍了adb的这个小工具,也是安卓下的开发神器。libiphone可以让Linux设备连接ios设备,苹果官方本身并不支持,所以有人开源出了这样一款工具。

安装

我使用的是Ubuntu17.10

> sudo add-apt-repository ppa:pmcenery/ppa
> sudo apt update
> sudo apt install libimobiledevice-utils
> sudo apt install ideviceinstaller

使用

# 安装ipa文件
> ideviceinstaller -i xxx.ipa
# 卸载应用,需要获取应用的bundleID
> ideviceinstaller -U [bundleID]
# 查看已连接的设备,同adb devices
> idevice_id --list
# 截图,但是不知道为什么,这个命令在我这里失效。。。应该是不要越狱的才对啊
> idevicescreenshot

具体可参看github官方地址: [https://github.com/libimobiledevice/libimobiledevice]

挂载文件系统工具:ifuse

下载源码进行编译

确保有git。。。


> git clone https://github.com/libimobiledevice/ifuse.git
> cd ifuse
> ./autogen.sh
> ./configure
> make

使用

# 创建一个真实目录
> mkdir ipone_backup
# 挂载
> ifuse ipone_backup
# 卸载
> fusermount -u ipone_backup

这样就可以在Linux系统中查看IOS设备文件了。ifuse具体文档可查看github官方地址

以上就是关于在Linux下操作IOS设备的介绍了,感觉不如adb的有意思。

可参考文章:

iOS开发的另类神器

2019-01-21 15:05:00 weixin_30559481 阅读数 23

你可曾想过在IOS设备上运行Linux系统?或者用shell来传输文件、编写脚本,又或者使用Vi来开发代码?

Here is a good news,现在有了一个叫iSH的东西,你可以使用它在IOS设备上来进行上述操作。

iSH是一个使用usermode x86模拟器将Linux shell引入IOS设备的工具,基于Alpine Linux,该程序占用空间小,具备一定的安全性且易于上手,几乎没有各种广告、插件之类的东西干扰用户。
流程

想要在IOS设备上安装iSH,首先需要安装TestFlight,有了它呢就能在设备上安装测试版的程序了,美滋滋。

装完TestFlight后,跳转到这个链接:https://testflight.apple.com/join/97i7KM8O,然后点击“开始测试”,如图所示,就可以打开TestFlight并收到加入iSH测试版的邀请了。

install-ish.jpg

通过TestFlight安装iSH

一旦安装了iSH,就可以在IOS设备上正常打开了,程序会有ash shell,但是可以使用APK包管理器执行相关命令以及安装其他的包。

iSH-installed.jpg

iSH安装完成

当然,iSH才刚刚上线不久,并且只能在模拟器下运行,所以并不是所有的Linux程序都能使用(一些满脑子骚操作的朋友们克制一下自己)。但是仍然有搞头,例如SSH还是可用的。iSH提供了一些用户可能在Linux中用到的基础程序,例如Vi,wget,zip/unzip,tar等。(这些都可以在文末的内置命令列表中查看)

wget-vim.jpgwget和Vi的使用界面
使用APK在iSH中安装软件

Alpine Linux使用APK包管理器来进行相应程序的安装。

APK的操作很简单,可用于搜索、安装、罗列、删除包等一系列操作。

输入apk info,列出当前已安装的软件包。

输入apk search [package_name],搜索需要添加的新包。例如,若需要搜索PHP,则输入apk search php。

输入apk add [package_name],安装新的包,例如,安装php,可输入apk add php,若要安装Python,则输入apk add python。

python-php.jpg

在iSH中安装php和python

最后,若需要删除已安装的包,则可输入apk del [package_name],例如,删除php,只需输入apk delete php。
在iSH和iCloud之间传输文件

现在,有了iSH就可以通过IOS设备进行实际的开发以及测试工作了,因此,通过iCloud将文件传输至iSH也是非常容易的。

安装了iSH后,系统的文件管理中会创建一个新的路径,以便用户能够随时访问iSH文件系统,并且能够通过该文件夹将文件发送至其他位置,例如iCloud Drive,手机内存或Dropbox中。

files-trasnfer.jpg

文件系统的位置

如果想要从iSH中传输文件,只需要选择该文件,然后点击“发送”以及“另存为”就可以了。

比较遗憾的是,目前这种文件传输还是单向的,iSH还是只出不进的状态。不过用户也可以使用wget将文件传输至iSH。
/bin/命令可用汇总

arch ash base64 bbconfig busybox cat chgrp chmod chown conspy cp date dd df dmesg dnsdomainname dumpkmap echo ed egrep false fatattr fdflush fgrep fsync getopt grep gunzip gzip hostname ionice iostat ipcalc kbd_mode kill link linux32 linux64 ln login ls lzop makemime mkdir mknod mktemp more mount mountpoint mpstat mv netstat nice pidof ping ping6 pipe_progress printenv ps pwd reformime rev rm rmdir run-parts sed setpriv setserial sh sleep stty su sync tar touch true umount uname usleep watch zcat

/usr/bin/可用命令汇总

awk basename beep blkdiscard bunzip2 bzcat bzip2 cal chvt cksum clear cmp comm cpio crontab cryptpw cut dc deallocvt diff dirname dos2unix du dumpleases eject env expand expr factor fallocate find flock fold free fuser getconf getent groups hd head hexdump hostid iconv id install ipcrm ipcs killall ldd less logger lsof lsusb lzcat lzma lzopcat md5sum mesg microcom mkfifo mkpasswd nc nl nmeter nohup nproc nsenter nslookup od passwd paste patch pgrep pkill pmap printf pscan pstree pwdx readlink realpath renice reset resize scanelf seq setkeycodes setsid sha1sum sha256sum sha3sum sha512sum showkey shred shuf smemcap sort split ssl_client strings sum tac tail tee test time timeout top tr traceroute traceroute6 truncate tty ttysize udhcpc6 unexpand uniq unix2dos unlink unlzma unlzop unshare unxz unzip uptime uudecode uuencode vi vlock volname wc wget which whoami whois xargs xxd xzcat yes

OK,以上就是对iSH的初步介绍,各位有兴趣的童鞋也可以自己下载来试试看,只不过要注意别把自己手机玩坏了。

*参考来源:bleepingcomputer,Karunesh91编译,

转载自FreeBuf.COM

原文链接:https://www.freebuf.com/news/189464.html

转载于:https://www.cnblogs.com/heycomputer/articles/10298796.html

2019-12-30 10:54:12 u012094456 阅读数 64

Android有个adb命令,可以很方便的做一些事情,比如直接安装应用。但是因为苹果比较封闭,没有直接的命令可以使用。但是有大牛做出了这样的东西–libimobiledevice

关于libimobiledevice的描述

A library to communicate with services of Apple iOS devices using native protocols.

ibimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。由于苹果官方并不支持Linux系统,但是Linux上的高手绝对不能忍受因为要连接iOS设备就换用操作系统这个事儿。因此就有人逆向出iOS设备与Windows/Mac Host接口的通讯协议,最终成就了横跨三大桌面平台的非官方版本USB接口library。经常用Linux系统的人一定对libimobiledevice不陌生,但是许多Windows和Mac用户也许就不知道了。事实上,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具。因为源码是开放的,可以自行编译,所以对很多开发者而言可以说更为实用。

可以自行到GitHub上下载编译https://github.com/libimobiledevice/libimobiledevice

  -u, --udid UDID    Target specific device by its 40-digit device UDID.

  -l, --list-apps    List apps, possible options:

       -o list_user    - list user apps only (this is the default)

       -o list_system    - list system apps only

       -o list_all    - list all types of apps

       -o xml        - print full output as xml plist

  -i, --install ARCHIVE    Install app from package file specified by ARCHIVE.

                           ARCHIVE can also be a .ipcc file for carrier bundles.

  -U, --uninstall APPID    Uninstall app specified by APPID.

  -g, --upgrade ARCHIVE    Upgrade app from package file specified by ARCHIVE.

  -L, --list-archives    List archived applications, possible options:

       -o xml        - print full output as xml plist

  -a, --archive APPID    Archive app specified by APPID, possible options:

       -o uninstall    - uninstall the package after making an archive

       -o app_only    - archive application data only

       -o docs_only    - archive documents (user data) only

       -o copy=PATH    - copy the app archive to directory PATH when done

       -o remove    - only valid when copy=PATH is used: remove after copy

  -r, --restore APPID    Restore archived app specified by APPID

  -R, --remove-archive APPID  Remove app archive specified by APPID

  -o, --options        Pass additional options to the specified command.

  -h, --help        prints usage information

  -d, --debug        enable communication debugging

  将真机连接在mac上,命令行输入idevice_id -l,如果出现该设备的udid,则说明配置成功能够正常识别了。

相关指令:

ideviceinstaller -i [ipa文件] -o [设备udid] 安装ipa文件到设备

ideviceinstaller -l -o [设备udid] 显示当前设备中所有已安装的应用

ideviceinstaller -U [appId] -o [设备udid] 卸载应用

2019-08-06 09:29:57 qq_40319394 阅读数 299
var u = navigator.userAgent
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if(isAndroid){ //如果是安卓
    do something....
}else if(isiOS) { //如果是ios
    do something....
}

解释说明:

 通过 var u = navigator.userAgent 来识别是哪种浏览器,大家可以在浏览器console.log(navigator.userAgent)看一下

u.indexOf('Android') > -1 如果大于-1,变量isAndroid  就为true,

var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //这句话 鄙人就暂时没有好好去看,如果有好的答案,请评论回复,

感谢--共勉
没有更多推荐了,返回首页