多Target:
1、复制Target
2、重命名 bundle id
3、新建 info-plist
4、增加宏
5、如果是swift 则在other swift flags里面加入
多Configuration:
User-Defined 用户自定义宏
代码中直接从info plist文件里面读取
在xcconfig 中加入环境变量,可以控制build setting中的选项。其中的内容是键值对的形式。
如何查找每个key的缩写 xcodebuildsettings.com/
对于多config 文件,可以一个把另外一个include进来,然后inherit解决Key冲突问题。
xcode运行的时候干了什么事情。 1、加载IPA包中的APP可执行文件,MACO-O等于配置文件+二进制代码 查看可执行文件中的内容 objdump --macho --private-headers
2、.m文件的中间产物.o是干什么用的 .o记录了内部外部的符号,编译的时候会把多个.o文件合并成一个。
查看符号的命令
nm -pa p排序 a显示所有符号
编译文件 链接文件 执行脚本 脱去符号
man ld 查看连接器里面有哪些参数
-Xlinker -S 代表吧-S参数传给连接器
条件设置
什么是Mach-O
查看mach header
.m -> .o 编译过程: 1、汇编 2、符号归类 -> 重定位符号表(用到的外部API),因为在编译此文件的时候可能用到的方法还没有放到符号表中。 如何查看重定位符号表:objdump --macho --reloc (.o path)
全局符号变成本地符号:加 attribute((visibility("hidden"))) 或者 变成static
定义两个相同函数名,但是在不同文件中的符号。不会有问题。
查看符号表 objdump --macho --syms {MACH_PATH} 查看简介符号表 objdump --macho --indirect-symbols ${MACH_PATH} 简介符号表:使用的外部API
弱定义符号 attribute((weak)) 如果链接器找到了一个符号,则弱定义符号被忽略 弱引用符号 attribute((weak_import)) 没有实现此符号,编译器不会报错。使用时要加判断(如果没有实现此方法需要在编译的时候执行脚本 -Xlinker -U)
重新导出符号: -Xlinker -alias -Xlinker _NSLog -Xlinker Cat_NSLog