Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save calvingit/302b21843a4601ea14e0bb7fbaf70fa1 to your computer and use it in GitHub Desktop.

Select an option

Save calvingit/302b21843a4601ea14e0bb7fbaf70fa1 to your computer and use it in GitHub Desktop.

如果在引入第三方库时,厂商没有特别说明是静态库还是动态库,要搞清楚"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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment