一个木匠

zqqf16 的个人博客

在 macOS 上编译 libimobiledevice

2022-03-24 更新

最近重新编译了一次,发现之前写的教程已经不适用了,最新的编译方法可参考这个脚本:SYM/build.sh,或者直接用我编译好的静态库:SYM/libimobiledevice

前言

最近给 SYM 添加了一个新功能:可以直接导入 iOS 设备上的崩溃日志,这个功能是通过 libimobiledevice 实现的。编译静态库的过程中踩了一些坑,在这里记录一下。

编译步骤

准备工作

安装编译工具

brew install automake autoconf libtool

安装依赖库

brew install --HEAD libplist usbmuxd

准备 OpenSSL

如果不想用 libimobiledevice 的库,而是直接用编译好的可执行文件,OpenSSL 可以省略,用 GnuTLS 代替。详见官方文档

用 OpenSSL 的好处是集成到其它 App 时,可以直接用 OpenSSL 的库,GnuTLS 的库怎么用还没研究……

下载 OpenSSL 代码

wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz -O openssl.tar.gz
tar vzxf openssl.tar.gz
cd openssl-1.0.2t

编译

./Configure darwin64-x86_64-cc
make

如果需要指定支持的 macOS 最小版本,可以这样:

./Configure darwin64-x86_64-cc -mmacosx-version-min=10.11
make

这样可以避免集成到 App 时 Xcode 的 warning。

修改 libssl.pc 文件

改成以下内容:

prefix=/path/to/your/openssl-1.0.2t
exec_prefix=${prefix}
libdir=${exec_prefix}
includedir=${prefix}/include

Name: OpenSSL-libssl
Description: Secure Sockets Layer and cryptography libraries
Version: 1.0.2t
Requires.private: libcrypto
Libs: -L${libdir} -lssl
Libs.private: 
Cflags: -I${includedir} 

添加 pkg-config 路径

export PKG_CONFIG_PATH=/path/to/your/openssl-1.0.2t

这一步是为了 pkg-config 能够索引到刚才编译的 OpenSSL。

编译 libimobiledevice

下载 libimobiledevice 代码

wget https://github.com/libimobiledevice/libimobiledevice/archive/master.zip -O libimobiledevice.zip
unzip libimobiledevice.zip
cd libimobiledevice-master

配置 & 编译

./autogen.sh
make

如果需要指定 macOS 的最小版本,可以这样:

make CFLAGS='-g -O2 -mmacosx-version-min=10.11' CXXFLAGS='-g -O2 -mmacosx-version-min=10.11'

集成

libimobiledevice 的库在 libimobiledevice-master/src/.libs 目录下,比如静态库是 libimobiledevice.a。头文件在 libimobiledevice-master/include 目录

OpenSSL 的库在 openssl-1.0.2p 目录下,静态库是 libcrypto.alibssl.a。头文件在 openssl-1.0.2p/include 目录。

如果集成到 App,还需要 libplist 以及 libusbmuxd 两个库,可以直接用 brew 安装的那个,或者也可以自己编译,步骤与编译 libimobiledevice 类似,但是要简单很多,不依赖 OpenSSL。

最后,欢迎体验最新版本的 SYM

-EOF-