首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Xcode 常见 CLI 工具

因为DWARF的存在我们才可以在 debug 时看到函数名称等信息,因为dSYM文件的存在,我们才可以符号化,解 Crash。 关于符号解析之前有过一篇文章 iOS 符号化解析。...中的程序符号表 nm XXX # 查看所有符号,会打印出符号来源哪个地方 nm -nm XXX # 找到未定义的符号,也就是外部符号 nm -u XXX 前面我们曾经查看过xcodebuild的符号...,其中全部的类型包括: A 该符号的值在今后的链接中将不再改变; B 该符号放在 BSS 段中,通常是那些未初始化的全局变量; D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量; T 该符号放在代码段中...,通常是那些全局非静态函数; U 该符号未定义过,需要自其他对象文件中链接进来; W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。...### 查看查看静态库支持的 CPU 架构 lipo -info frameworkName.framework/frameworkName lipo -info frameworkName.a ##

3.5K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何创建可在 Apple 自研芯片和基于 Intel 的 Mac 机上运行的应用程序

    前言 原生的应用程序比转换的应用程序运行效率更高,因为编译器能够针对目标架构来优化代码。如果一个应用程序只支持 x86_64 架构,那必须在 Apple 芯片上的 Rosetta 转换下运行。...更新 Xcode 工程架构列表 Xcode 12 及更高版本会自动将 arm64 架构添加到所有 macOS 二进制文件(包括应用程序和库)的标准架构列表中。...您可以通过更改项目的 Build Active Architecture Only 选项来在任意的 Mac 机上创建带有调试符号的通用二进制文件。...当您构建通用二进制文件时,Xcode 会两次编译您的源文件,每种架构一次,Link 每种架构的二进制文件后,Xcode 使用 lipo 工具将特定架构的二进制文件合并到单个可执行文件中。.../Mail x86_64 arm64 指定应用程序的启动行为 对于通用二进制文件,系统倾向于执行当前平台原生的架构,在基于 Intel 的 Mac 电脑上,系统始终执行 x86_64 架构。

    2.3K30

    iOS逆向之Mach-O文件

    MH_DSYMrelease模式下,打模拟器包或真机包就会在app同级目录下生成一个.dSYM文件,如下:[dSYM]这个.dSYM格式的文件是iOS App的符号表,存储着二进制文件的符号信息。...关于Xcode中的building settings->Architectures的$(ARCHS_STANDARD)是一个环境变量,在不同的Xcode上代表不同的架构。...比如在Xcode11上可能代表arm64、armv7、armv7s、x86_64。但在Xcode4上可能只代表armv7、armv7s、x86_64。...如果Architectures环境变量支持的架构不能满足我们的开发要求,我们可以通过other添加架构。...比如:另外,Building settings->Valid Architectures代表可用的架构,这个参数也是支持配置的,如下是美团在不同打包模式下支持的架构:最终我们打包的ipa包支持的架构取决于

    10.9K10

    iOS编译原理

    后端:以中间代码作为输入,进行与架构无关的代码优化,接着针对不同架构生成不同的机器码; 补充: 前后端以中间代码作为媒介,使得前后端可以独立的变化,互不影响; 这样的好处在于:新增一门语言只需要修改前端...,而新增一种CPU架构只需要修改后端即可; 2.LLVM与Clang LLVM是苹果当前使用的编译器: LLVM是一套编译器基础设施项目,为自由软件,以C++写成,包含一系列模块化的编译器组件和工具链...CLang基于LLVM,是一个高度模块化开发的轻量级编译器; CLang主要来自苹果电脑的支持,同时支持C、Objective-C以及C++; CLang用于替代Xcode5版本前使用的GCC,编译速度提高了...命令,查看文件类型 % file main main: Mach-O 64-bit executable x86_64 % ....; 链接器链接多文件时会创建符号表,用于记录所有已经定义和未定义的符号; 出现相同符号,会报错:"ld:dumplicate symbols"; 在其他目标文件里没有找到到符号,会报错:"Undefined

    1.6K20

    从Xcode10不再支持libstdc++说起

    某个静态库如果以前是依赖于libstdc++库中的代码,那么这个静态库在Xcode10中被链接时将会报符号找不到的链接错误信息:Undefined symbols for architecture XXX..._64 可能你会想按理来说libc++库中的代码实现应该只是libstdc++中代码实现的升级版本,应该要存在着兼容的情况,那为什么还会报符号未定义的错误呢?...,因此不会产生符号重复和冲突的错误!...这也就可以解释当我们把一个依赖libstdc++.dylib的静态库,引入到Xcode10的工程中时会报如下的错误: Undefined symbols for architecture x86_64:...但是新版本的C++标准库中的所有符号都是在std::__1这个命名空间中,因此链接器将无法找到这个符号。

    2.2K30

    矢量符号架构作为纳米级硬件的计算框架

    hardware, distributed representations, data structures, Turing completeness, computing in superposition 矢量符号架构作为纳米级硬件的计算框架...本文回顾了计算框架矢量符号架构(也称为超维计算)的开发最新进展。...正如我们所展示的,矢量符号架构是图灵完备的,我们看到它们充当在无数人工智能设置中使用分布式表示进行计算的框架。...出于以下原因,我们提出了向量符号架构(VSA)Gayler, 2003]或者,同义地,超维度计算[Kanerva, 2009]作为这样的计算框架。...因此,VSA概念可以灵活地连接到多种不同的硬件类型,例如模拟内存计算架构的二进制值[Karunaratne et al., 2020]或用于尖峰神经元架构的复值VSAsFrady and Sommer,

    41420

    xcconfig编写指南

    xcconfig文件,允许我们通过文件的方式管理Xcode中的Build Setting配置选项。xcconfig文件是纯文本文件。.../ws/Desktop/VIP课程/第一节、符号与链接/强化班第一节课资料/完成代码/LoginApp-冲突/Pods/Target Support Files/Pods-LoginApp/Pods-LoginApp.debug.xcconfig...Arch和Configration对设置进行条件化,例如: // 指定`Configration`是`Debug` // 指定`SDK`是模拟器,还有iphoneos*、macosx*等 // 指定生效架构为...`x86_64` OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*[arch=x86_64]= $(inherited) -framework "Cat"...(滑动显示更多) 注意⚠️:在Xcode 11.4及以后版本,可以使用default,来指定变量为空时的默认值: $(BUILD_SETTING_NAME:default=value) 优先级(由高到低

    63720

    iOS强化 : 熟悉 Mach-O 文件

    下面我们通过file指令来看一下我们的可执行文件: ? 通过上图,我们可以看到 test 可执行文件的类型是 Mach-O;架构是 x86_64,这是我们用模拟器运行的可执行文件。...32位处理器 ( ipnone5,iphone5s真机/armv7s) armv7 真机32位处理器 (iphone4真机/armv7) x86_64 模拟器64位处理器 (iphone6以上的模拟器)...i386 模拟器32位处理器 (iphone5,iphone5s以下的模拟器) Tips: 在 Xcode 中设置 Arhitectures,Debug 属性设置为 NO 的时候,会编译支持所有架构的版本...(关于 Xcode 环境的配置,有不清楚的同学可以看这里:Xcode 多环境的配置) ⚠️ 这里还有一点要注意:测试的时候,如果工程只包含一种架构,此时要手动添加其他架构。...) LC_SYMTAB 载入符号表地址 LC_DYSYMTAB 载入动态符号表地址 LC_LOAD_DYLINKER 加载动态链接器 LC_UUID 唯一标识,crash解析中也会用到,检查dysm文件和

    1.2K40

    iOS开发笔记(十四)

    这样解释了为什么,__has_include可以找得到头文件,但是最终报符号缺失,因为链接时没有带上这个库的符号。...2.去除i386库的支持 i386是一个很老的架构,目前是32位的模拟器在使用。某一个依赖库的新版本不支持i386,build时在提示符号缺失。...target的buid settings PS:Xcode12默认架构里不包括模拟器,可以按照上图Architectures的Debug配置,增加模拟器的选项。...:为什么CocoaPod的默认架构里面包括i386,但是主工程里面的默认架构没有包括i386?(CocoaPod版本1.7.4) 是因为两者的baseSDK不同。...pod工程的project的buid settings 当工程选择No SDK的时候,默认选项就是macOS,此时architecture就包括armv7/arm64和intel x86_64/i386

    1.4K20

    【iOS】记录iOS14以及xcode12 遇到的问题

    1、iOS14 内购完成后,applicationusername丢失 问题描述: 内购完成会,会受到以下回调,一般我们会通过payment的applicationusername用于关联我们的orderId...作为Key去存储applicationusername,同时也要做同一个productIdentifier购买未完成时,不能再购买同一个productIdentifier的操作。...2、xcode14 sdk编译出来的架构没有x86_64 问题描述: 更新完xcode14后发现,工程的构建的framework在模拟器运行失败,报没有x86_64架构,编译后通过 lipo -info...指令发现只有arm64的架构,没有x86_64的架构。...解决方法: 在VALID_ARCHS中加入了x86_64之后我这里就可以正常运行了 参考链接 https://www.jianshu.com/p/f1436462c825

    1.1K51

    Swift Module Interfaces

    _cVarArgEncoding) } 是 iOS 源码 但是,在 x86_64 架构下,上述appendWords(arg._cVarArgEncoding) 并不会被执行。...本文只是完善 x86_64 场景的调用逻辑,不影响原文的结论。 方案一:根据宏定义区分 受宏定义[1]影响,原始的 Swift 代码会针对不同的架构&系统被编译为不同代码。...因为模拟器属于 x86_64 架构,所以,它会产生另外一套代码。(具体的代码,可以根据方案二获取)。...实际上,Swift Module Interfaces 文件具有以下特征: 包含文本格式的公共 API 包含可内联的代码 不同CPU架构架构可以具有不同的版本 跨编译器版本兼容性 通过打开 Xcode..._cVarArgEncoding) } iPhone 模拟器(x86_64) 而 iPhone 模拟器(x86_64) 却会出现不同的结果: iPhone 模拟器(x86_64) 对应的路径是 /Applications

    1.6K31

    Xcode11打包失敗IPA processing failed

    Xcode11打包失敗IPA processing failed 原文地址 是因为项目中使用的SDK支持i386,x86_86這個架构,可能是iOS13不支持模拟器架构了,所以必须强制去除。...各種架構解釋: 模擬器32位處理器測試需要i386架構,(iphone5,iphone5s以下的模擬器) 模擬器64位處理器測試需要x86_64架構,(iphone6以上的模擬器) 真機32位處理器需要...(iphone6,iphone6p以上的真機) 解决 方法一: 使用低版本的Xcode打包,低于Xcode11就可以了。 方法二: 去除SDK中的i386、x86_86。这里只能一个个去排查。...are: i386 x86_64 armv7 arm64 3.刪掉i386,x86_84 lipo -remove i386 AliyunMediaDownloader -o AliyunMediaDownloader...lipo -remove x86_64 AliyunMediaDownloader -o AliyunMediaDownloader 再次執行打包就行了。

    4.9K30

    深入iOS系统底层之程序中的汇编代码

    而-o 后面的输出文件就是对应的汇编代码文件,一般这个输出文件以.s为扩展名。这里要注意同时使用-arch参数指定输出的体系架构。...工程中引入汇编代码 你也可以在xcode工程中直接引入汇编代码或者使用汇编代码来编写程序和函数,添加汇编文件的方法是:File菜单->New->File......常见的汇编语法 在Xcode中无论是AT&T还是arm汇编语言的关键字都以.开头。编写汇编代码主要就是数据的定义以及代码指令。...arm体系下的汇编代码特有的行注释是代码后面的 ;号注释,而x86_64体系下的汇编代码的特有的行注释是##。 2.节 无论是指令还是数据管理的单位都是节(Section)。...下面就是一个求两个参数和的加法函数在x86_64位体系结构下的实现: //x86_64位下的函数实现 .text .global _add .align 3 _add: movq %rdi,%rbx

    1.7K30

    mac 编译问题解决——building for macOS-x86_64 but attempting to link with file built for xxx

    0x72 0x63 0x68 0x3E 0x0A 0x2F 0x20 0x20 0x20 0x20 0x20 0x20 0x20 ) Undefined symbols for architecture x86...在Mac下,有两套编译工具链,GNU的和Apple(通过Xcode安装)的,GNU的以gcc为代表,而Apple的则以clang为代表,在这两个核心编译工具周围,又有很多别的小的编译工具。...如果是Apple的ranlib工具的话,ranlib --version输出应该是下面这样: $ranlib --version error: /Applications/Xcode.app/Contents...根据ChatGPT, ranlib功能如下: ranlib是一个命令行工具,用于在静态库中创建索引(也称为符号表)。索引提供静态库中所有符号(函数、变量等)的列表。...它帮助编译器和链接器在链接时更快地查找和解析符号。当一个程序需要链接静态库时,链接器会使用ranlib创建的索引来确定静态库中包含的符号,以便正确地链接程序。

    77820

    iOS 了解Xcode Bitcode

    Xcode之Bitcode Bitcode是Xcode7的新特性。...Enable bitcode为YES; 使用的framework或者.a 文件支持的架构是齐全的; 那么为什么有些framework没有做成支持Enable bitcode的方式呢?...创建或者是操作一个通用文件,转变通用文件为单独的架构文件或者反过来转变单独架构文件为通用文件。 给大家介绍一下查看Framework支持的架构,这里我们会用到lipo info。...简单地列举出来输入的通用文件的架构类型,列举出来每个架构的名字: 使用方式:lipo -info framework或者.a实体文件路径 使用示例: lipo -info /Users/wangyongwang...32位微处理器,iPhone 5S及之后都是64位的微处理器 模拟器上使用的CPU情况由所用的电脑确定 CPU iPhone i386 32 位微处理器 x86_64 64 位微处理器

    91820
    领券