目录
快速开始
一、索引速度
索引完成后可以更好的使用xcode:代码补全、跳转到定义
索引做了哪些事:词法分析、语法分析、语义分析、建立符号表,建立引用关系
xcode自定义了clang,所以才有indexing,我们也可以在配置项中关掉indexing来提高编译速度
build-setting搜索:COMPILER_INDEX_STORE_ENABLE
二、组件二进制
使用组件二进制:1、提高编译速度。2、保护源代码
如何使用:在podfile文件内配置相关flag,然后从文件服务器下载二进制文件的.zip文件
相关技术:xcframework文件,xcframework 不是任何编译器和链接器支持的文件格式,而是xcode支持的文件格式
他包含了多种架构格式,在编译时xcode会自动选择对应的架构,而不用像lipo命令那样剥离或合并不同的架构
三、创建一个Gem
带命令行工具的Gem,在工程目录下创建一个bin目录,并且在gemspec文件内配置命令行工具的名字
修改gemspec文件
还没研究明白…
索引速度index
一、介绍
在iOS工程中,当你打开项目时,Xcode会执行一系列操作,其中之一就是进行索引(Indexing)。
索引是一个用于加速代码导航和查找的过程,它会分析项目中的源代码文件,并构建一个数据结构,以便更快地定位和理解代码。
具体而言,索引过程包括以下几个步骤:
词法分析
语法分析
语义分析
建立符号表
建立引用关系
索引的目的是为了提高代码编辑器和导航工具的性能,使开发者能够更快速、准确地定位和理解代码。
一旦索引完成,你就可以更容易地使用Xcode的功能,比如代码补全、跳转到定义、查找引用等。
初次打开项目时,索引可能需要一些时间,但它可以提供更好的开发体验。
二、关于clang
xcode其实自定义了clang
# 这个clang是xcode自定义的
22:33:14 › which clang
/usr/bin/clang
# 执行指令
clang --help-hidden
# 然后搜索index-store-path
-index-store-path <value>
Enable indexing with the specified data store path
也可以从homebrew安装一个没有index的clang
关掉xcode的index
组件二进制
一、关于二进制说明
三方库和私有库从源码转为二进制之后,会提高编译速度
二进制的生成,应该在开发这个库的开发人员手里。
xy:我们平时在执行pod install的时候,会根据podfile把每个Pod的源码下载下来,然后设置好依赖。
在编译的时候生成对应的静态库和动态库
如果是二进制组件,我们会根据podfile内设置的flag,直接将二进制的组件从仓库内下载下来,所以提高了编译速度
lipo命令会把多种架构合到一起,有时候还要再拆分出来,xcframework不会
xcframework 不是任何编译器和链接器支持的文件格式,而是xcode支持的文件格式 他包含了多种架构格式,在编译时xcode会自动选择对应的架构
二、二进制组件的实现思路
做一个命令:比如在三方库目录下执行一个 pod cat build 就会自动进行二进制生成然后推送到对应的仓库和私有源
做一个gem的命令行工具,然后将他变为cocoapods插件的一部分
做一个插件:在执行pod install 的时候来做这个事情
给cocoapods制作一个插件:pod plugins –help
插件里可以调用命令,命令里边调用不到插件
这里表述的有些混乱,还未真正理解,后续再回来补充
Gem制作
一、创建Gem工程
第一步:bundle gem cocoapods-cat-bin
在执行这个命令时,终端内会有很多选择提示,暂时还不知道是什么,后续补充
第二步:配置cocoapods-cat-bin.gemspec文件。文件内各个选项的作用
1、version文件的配置,如不不知道参考别人的成熟的gem,比如cocoapods.使用require引用文件
2、ruby版本配置
3、files配置 %w[fileName1 fileName2],资源文件配置。%w[] 表示空格分隔的字符串数组
4、spec.executables = %w[cat_bin] 表示bin目录下的cat_bin是个命令行文本,将来会被放到相应的目录下,可以作为命令行工具使用
5、spec.require_paths = [“lib”] require fileName 的起始路径
6、spec.add_runtime_dependency ‘cocoapods’ 依赖的三方库
第三步:Gemfile文件内,配置 gemspec文件
source "https://rubygems.org"
gemspec
# gem "rake", "~> 12.0"
# gem "rspec", "~> 3.0"
第四步:设置对外的暴露文件,工程目录/lib/cocoapods-cat-bin.rb
第五步:执行bundle install 如果有错误进行排错
1、错误一:require的路径问题,根据提示修改路径引用,确保引用到对应的文件
2、错误二:todo问题,gemspec文件内带todo的行要进行填写
第六步:创建cocoapods_plugin.rb文件
1、cocoapods要求在lib文件下要有一个cocoapods_plugin.rb文件
2、根据这个文件cocoapods才能将插件加载进去
3、将来才能在终端使用我们的命令行工具
二、实现一个pod cat 命令
目录结构如下
cat.rb的文件内容如下
#!/usr/bin/env ruby
require 'cocoapods'
module Pod
class Command
class Cat < Command
self.summary = 'Cat bin'
self.description = 'Cat bin'
# Cat 初始化的时候调用
def initialize(argv)
super
end
# 重写run方法,执行 pod cat 的时候会调用
def run
p '111'
end
end
end
end
cat_bin文件内容如下
if $PROGRAM_NAME == __FILE__
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', __dir__)
require 'bundler/setup'
end
require "cocoapods-cat-bin/command/cat"
require "cocoapods-cat-bin/command/build"
# 传递过来的参数 ["cat"]
# 执行 pod cat
# 会找到Cat类下面的run方法进行调用
Pod::Command.run(ARGV)
launch.json文件内容如下
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Cat Bin",
"type": "rdbg",
"request": "launch",
"script": "${workspaceRoot}/bin/cat_bin",
"args": [
"cat",
],
}
]
}
还没有研究明白
制作带命令行的Gem,可以使用 thor
见 helloRuby 项目下的 mypod.zip
module Mypod
class Command < Thor
desc 'hello', 'Say hello'
def hello
puts 'Hello from MyPodCommand!'
end
end
end
行者常至,为者常成!