-
常见写法解读
目录 代码解释代码解释一、代码1type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;我们先定义一个类型 User 以方便后续解释代码type User = { id: number; name: string; age: number; }1、keyof T 拿到类型 T 的所有键,例如:keyof User // "id" | "name" | "age"keyof ...…
-
day02
目录 类型 typeof的两种用法 class的用法类型一、字面量类型let str1 = 'Hello TS'const str2: 'Hello TS' = 'Hello TS'let age: 18 = 18function changeDirection(direction: 'up' | 'down' | 'left' | 'right') { console.log(direction)}// leftchangeDirection('left')二、枚举类型1、数...…
-
day01
目录 TS介绍 类型相关 TS新增类型 对象接口TS介绍1、js的超集 ts = 类型 + js,变量类型发生变化时js不会检查,ts会检查2、区别 ts是静态语言(编译时进行类型检查,可以更早发现错误)let age: number = 18// 这句代码报错age = '20'age.toFixed()js是动态语言(执行时进行类型检查,发现错误较晚)3、转化 ts 命令行工具(编译工具) 转为js 再执行 安装:npm i -g typescript 使用 tsc h...…
-
动静态库
目录 静态库 动态库-iOS静态库和动态库详解-iOS之深入解析静态库和动态库静态库.o文件的合集,是编译后的产物,在链接阶段会被打包进mach-O可执行文件动态库是多个.o文件,链接后的产物,不会被打包进mach-O可执行文件,只会把引用打包进mach-o(rPath/frameworks/xxxx.framework)在app启动时根据引用通过dyld加载进内存,所以过多的动态库会影响app的启动时间静态库可以依赖静态库(一块打包进了mach-o) 静态库可以依赖动态库...…
-
8.Hmap
目录 头文件查找 Swift和module HeaderMap vfs头文件查找一、.m文件在编译的时候如何查找其使用的头文件?第一轮:先在.m的同目录下查找 1、查找是否有modulemap文件,如果有就以module的形式引入(modulemap文件内配置了对应了.h文件)2、编译选项是否配置了module文件,module的方式3、然后看是不是framework(后边讲)4、是否有headermap文件,headermap文件内若配置的是头文件的具体路径,copy的方式, 若...…
-
7.头文件和PCH
目录 快速开始 PCH文件 编译流程 module快速开始一、pch1、include 和 import 的区别?import = include + #pragma once2、头文件是如何找到的 完整路径 = header_search_path + viewcontroller.h3、pch文件的原理 pch文件在编译阶段会生成ast产物,然后被复制到所有的.m文件中 节省了重复编译的时间,但重复copy的时间没有缩短还增加了二、编译流程编译器前端clang:词法分析(...…
-
6.组件二进制(下)
目录 快速开始 插件介绍 编译 制作xcframwork 创建私有库使用二进制源快速开始插件介绍部分仅做了解(第一段视频)组件二进制的这三节课信息量很大,命令行工具、cocoapods插件,最终怎么使用也没太明白需要静下心来好好研究老师的ruby代码,编译部分根据第二段视频讲解的思路去一点一点的研究二进制制作的思路: 1、生成app工程 2、获取多平台多架构的编译产物 3、制作xcframework 4、制作和使用二进制源插件介绍一、插件如何调试cocoapods在执行命令的...…
-
5.组件二进制(中)
目录 快速开始 制作二进制包步骤 cocoapods-project-gen快速开始一、制作二进制的步骤1、copy一份源码到一个新目录,不要对源码直接修改2、生成工程:使用工具cocoapods-project-gen 将网络引入和本地引入两种方式做了结合3、编译工程4、制作二进制包xcframework,上传到文件服务器5、配置podfile文件,使用二进制pod lib lint 做了哪些事? 从远程拉取代码 按照指定的平台分别生成xcode工程 对所有平台app进行编译 编...…
-
4.组件二进制(上)
目录 快速开始 索引速度 组件二进制 Gem制作快速开始一、索引速度索引完成后可以更好的使用xcode:代码补全、跳转到定义 索引做了哪些事:词法分析、语法分析、语义分析、建立符号表,建立引用关系 xcode自定义了clang,所以才有indexing,我们也可以在配置项中关掉indexing来提高编译速度 build-setting搜索:COMPILER_INDEX_STORE_ENABLE二、组件二进制使用组件二进制:1、提高编译速度。2、保护源代码 如何使用:在podfil...…
-
3.ruby环境配置
目录 快速开始 xcode自带动态库操作pbxproj ruby环境和vscode调试环境配置 xcodeproj项目调试 cocoapods项目调试快速开始一、两个知识点@rpath:程序在运行时搜索动态链接库(dylib)的路径。向工程中拖入一个framework时发生了什么?配置搜索路径:告诉去哪里搜索frameworkframework search path配置链接器,告诉链接器要链接的framework的名称ld -framework 名称二、Rubyruby的环境配...…
-
2.简单介绍pbx文件
目录 快速开始 几个常用的操作 pbxproj文件 操作pbxproj快速开始一、修改编译产物路径通过配置 CONFIGURATION_BUILD_DIR 环境变量来修改二、.pbxproj文件文件记录了: 项目配置:项目名字、版本信息文件引用:使用了哪些源代码文件和资源文件 目标设置:target的编译选项和链接选项 依赖关系:target之间的依赖关系操作.pbxproj文件可以修改项目的各种配置和依赖关系等等,如何修改呢? cocoapods提供了命令行工具:xcodepr...…
-
1.工程文件介绍
目录 快速开始 工程介绍 Workspace xcodebuild xcode就是个终端 cocoapods的Podfile.lock和Manifest.lock文件 cocoapods工程的结构快速开始一、工程文件的介绍workspace:工作空间,包含了多个project project:项目包含了所有的资源文件和代码文件和配置项 target:具体的构建产物,从project中选择资源文件和代码文件构建出具体的产物,配置默认项继承自project ...…
-
一个shell脚本
目录 shell脚本shell脚本写在XYDebugConfig.xcconfig文件中的内容#include "Pods/Target Support Files/Pods-XYApp/Pods-XYApp.debug.xcconfig"VERBOSE_SCRIPT_LOGGING = -vMACHO_DIR=${BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/${WRAPPER_NAME}MACHO_PATH=${MACHO...…
-
动态库
目录 0401 dead strip 0402 动态库原理 0403 tbd与符号 0404 编译动态库framework 0405 image not found的原因 0406 install_name 0407 rpath&exec_path 0408 loader_path 0409 reexport_framework0401 dead stripecho "-----开始test.o to test EXEC"clang -target x86_64-...…
-
静态库
目录 0301 man nm 与 common符号 0302 链接AFN生成目标文件 0303 链接静态库生成可执行文件 0304 framework初探 0305 framework 0306 shell 0307 dead strip 0308 下节课内容0301 man nm 与 common符号1. 使用man命令man nmman objdumpman git2. 使用--helpnm --helpobjdump --helpgit --help0302 链接AF...…
-
符号表
目录 在xcconfig文件内配置 符号的可见性 0203 链接与符号表 0204 全局和本地符号 0205 同一文件相同全局符号 0206 导入导出符号 0207 weak符号表 0208 Swift符号 0209 strip 0210 llvm-strip在xcconfig文件内配置.xcconfig文件//1.//解决xcconfig文件的冲突#include "../../../Pods/Target Support Files/Pods-LCClientDem...…
-
工具使用
目录 终端快键键 man命令 objdump命令 clang命令 nm命令 swiftc命令 ar命令终端快键键control + E : 定位到尾部 control + W : 向前清除一个单词man命令 参考文章:man命令常用工具命令man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。比如查看 git 指令,在终端输入man git搜索git相关指令说明#比如查找 push 的说明/-push/ : 开始...…
-
xcconfig文件
目录 xcconfig指南 变量 优先级xcconfig指南语法xcconfig文件的语法比较简单,每个配置文件都由一系列键值分配组成,这些键值分配具有以下语法:1 BUILD_SETTING_NAME = value注释xcconfig文件只有一种注释方式//include导入其它设置在创建 xcconfig 文件的时候,可以根据需求,创建多个.也就意味着,可以通过 include 关键字导入其他的 xcconfig 内的配置.通过 include 关键字后接上双引号:1 #inc...…
-
多环境配置
目录 target方式 schemes方式 xcconfig方式Project:包含了项目所有的代码,资源文件,所有信息。 Target:对指定代码和资源文件的具体构建方式。 Scheme:对指定Target的环境配置。target方式第一步:复制一个target第二步:修改target名称第三步:创建一个新的AppIcon-Dev第四步:新target配置AppIcon-Dev第五步:新target配置info.plist第六步:新target配置Preprocessor...…
-
LLVM(三):clang、xcrun命令
参考文章:iOS编译命令 clang xcrun目录 clang命令 xcrun命令 clang命令编译成可执行文件clang main.m -o main -framework Foundation将OC代码转换成C++代码clang -rewrite-objc main.m__weak、__strong等修饰符报错,这是因为__weak需要运行时objc的支持,需要指定运行时环境clang -rewrite-objc -fobjc-arc -fobjc-runtime=ios-...…