上一章讲了xcode 生成产物的过程及路径配置,还有 xcodeproj文件作用。今天来了解Xcode内置工具及pods调试。
一、Xcode内置工具
先来看看Xcode内置PlugIns有哪些:
xcode是通过xcode3core这个差距来配置原文件关联xcodeproj工程文件的。
我们发现上一章出现的熟悉参数。
核心问题来了(ps:让我想到<一休哥>多动脑思考一下):
1.如果我们能调用这个系统动态库dyld(DevToolsCore)
2.通过系统动态库来调用内置工具
3.比如修改xcodeproj文件比较,举一反三。
1.将系统动态库导入Xcode
- 将系统动态库拖入Xcode中时可能会运行报错:
dyld[20219]: Library not loaded:
@rpath/DVTPortal.framework/Versions/A/DVTPortal
-
@
rpath:framework在真机中的路径(真机中采用@rpath + framework中要调用的类的路径) -
解决方法:找到链接不到的framework所在路径,配置给
Runpath Search Paths(多个framework找不到可能要添加多个路径)配置Config.xcconfig文件环境变量
LD_RUNPATH_SEARCH_PATHS = "/Applications/Xcode.app/Contents/SharedFrameworks" "/Applications/Xcode.app/Contents/Frameworks" "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"
framework search path:去哪个路径去搜索framework在Config.xcconfig文件环境变量对应环境变量
FRAMEWORK_SEARCH_PATHS = "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"
ld -framework:使用Other Linker Flags告诉链接器要链接的framework名称
OTHER_LDFLAGS = -framework DevToolsCore -Xlinker -U -Xlinker _IDEInitialize
Xlinker:后面接的参数是直接传给链接器的,而非Clang了-U:要求链接器不要检查后边的符号(例中为_IDEInitialize符号)- 告诉连接器忽略_IDEInitialize这个符号错误。
- 配置
Header Search Paths,让工程能按路径找到这些头文件(注意如果在Build Settings中手动改了会影响Config文件生效)
HEADER_SEARCH_PATHS = "${SRCROOT}"
2.在编写功能代码(模拟将文件拖入工程)
int main(int argc, const char * argv[]) {
NSError *error;
BOOL initialized = IDEInitialize(1, &error);
PBXProject *project = [PBXProject projectWithFile:@"xxxxxx"];
[[project rootGroup] addFiles:@[@"xxxxx.h"] copy:NO createGroupsRecursively:NO];
[project writeToFileSystemProjectFile:YES userFile:NO checkNeedsRevert:NO];
NSLog(@"%@", project);
return 0;
}
编译成功:
二、pods调试
第二条是ruby调用三方库的流程。
1.ruby环境配置
也可参考ruby安装,已经安装或者会的同学就跳过。
1.gem info ruby-macho
2.ruby -v //查看版本
3.rvm list
4.bat ~/.zshrc //查看环境变量
5.vim ~/.bashrc //创建一个配置环境变量文件
6.source ~/.zshrc
7.echo $PATH
8.gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/
bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems
过程中遇到的问题集合:
1.发现rvm list 并没有指定到具体版本:
rvm list known //具体可以支持版本
rvm install 2.7.3
//如果rvm 版本过旧更新
\curl -sSL https://get.rvm.io | bash -s stable
rvm -v
2.国内老实的改镜像地址
3.配置IDE-VSCode
4.安装VSCode插件
Ruby
Ruby Solargraph
Error Lens
//验证是否安装 插件
gem info bundler
gem info ruby-debug-ide
gem info debase
gem info rubocop
gem info solargraph
gem info rake
//没有安装就执行
gem install ruby-debug-ide
//保证这些插件安装成功
//如果solargraph 无效执行如下代码
brew install coreutils
//查看安装路径
which solargraph
参考借鉴了:RVM 的安装和使用
2.pods调试
接下来,我们在xcode里用ruby调试pods。
注意:xcode的Ruby插件作用就是会生成一个调试文件launch.json
1.配置VsCode-ruby
name就是调试项目的名称,program 就是ruby代码文件。一般bin目录存放rb文件。
1.bundle:的命令,在VSCode中也需要用(Gemfile)配置文件编写
这些代码是不是很熟悉,就如我们podfile 文件代码差不多。
2.pods调试
使用VSCode打开CocoaPods-master
创建调试文件launch.json修改"program": "${workspaceRoot}/bin/pod"
然后在vscode终端执行:
bundle install
运行好久后:
rake版本太旧也要更新。
Uncaught exception: You have already activated rake 13.0.3, but your Gemfile requires rake 12.3.3. Prepending `bundle exec` to your command may solve this.
[/Users/xx/.rvm/rubies/ruby-3.0.0/lib/ruby/site_ruby/3.0.0/bundler/runtime.rb:309](<> [/Users/xx/.rvm/rubies/ruby-3.0.0/lib/ruby/site_ruby/3.0.0/bundler/runtime.rb:25](<>
launch.json配置args 添加install
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug xcodeproj",
"type": "Ruby",
"request": "launch",
"program": "${workspaceRoot}/CocoaPods-master/bin/pod",
"args":[
"install",
"--project-directory=./LGApp"
]
}
]
}
运行调试成功!
(由于本人对工程化理解有限,我就记录我所知的东西)