如果在引入第三方库时,厂商没有特别说明是静态库还是动态库,要搞清楚"Target" - "General" - "Frameworks, Libraries, and Embedded Content"- "Embed"选项:
- 静态 framework:选择 "Do Not Embed"
- 动态 framework: 选择 "Embed & Sign"
识别方法就是使用file xxx.framework/xxx命令,输出内容里面大概有两种:
- current ar archive random library: 静态库
- dynamically linked shared library: 动态库
简单判断就是看是否有单词“dynamically”,有就是动态库。
下面我们来写一个 Python 脚本来批量处理,根据传入的目录查找目录下的所有 framework 是否为动态类型:
import os
import subprocess
import sys
def check_framework(directory):
# 获取目录下所有文件和子目录
for root, dirs, files in os.walk(directory):
for dir_name in dirs:
if dir_name.endswith('.framework'):
framework_dir = os.path.join(root, dir_name)
framework_file = os.path.join(framework_dir, dir_name[:-len('.framework')])
# 使用 file 命令检查文件类型
output = subprocess.check_output(['file', framework_file]).decode('utf-8')
# 检查输出是否包含 'dynamically' 关键字
if 'dynamically' in output:
print(f"{framework_dir} 是动态 framework.")
else:
print(f"{framework_dir} 是静态 framework.")
# 检查是否提供了目录参数
if len(sys.argv) < 2:
print("请提供目录参数.")
sys.exit(1)
# 获取目录参数
directory = sys.argv[1]
# 检查目录是否存在
if not os.path.isdir(directory):
print(f"目录 {directory} 不存在.")
sys.exit(1)
# 执行检查
check_framework(directory)