目录
快速开始
一、两个知识点
@rpath:程序在运行时搜索动态链接库(dylib)的路径。
向工程中拖入一个framework时发生了什么?
配置搜索路径:告诉去哪里搜索framework
framework search path
配置链接器,告诉链接器要链接的framework的名称
ld -framework 名称
二、Ruby
ruby的环境配置
gem install gemName 和 bundle install 的区别
能调试 xcodeproj 和 cocoapods 两个项目
不使用电脑安装的pod命令,通过cocoapods项目调试iOS项目
xcode自带动态库操作pbxproj
一、rpath
在build settings 中搜索 rpath 点开右侧说明我们会看到 LD_RUNPATH_SEARCH_PATHS
LD_RUNPATH_SEARCH_PATHS 是一个与动态链接器(ld)相关的构建设置,用于指定程序在运行时搜索动态链接库(dylib)的路径。
自定义库的路径: 如果你使用了一些不在系统标准路径中的动态库,你可以通过设置 LD_RUNPATH_SEARCH_PATHS 来告诉动态链接器在这些自定义路径下查找。
避免使用 @rpath: 在 Xcode 中,通常会使用 @rpath 占位符来表示运行时搜索路径。通过设置 LD_RUNPATH_SEARCH_PATHS,你可以自定义这个路径,而不依赖于默认的 @rpath。
解决运行时链接问题: 如果你的应用程序在运行时无法找到所需的库文件,可能会导致链接错误。通过设置正确的 LD_RUNPATH_SEARCH_PATHS 可以解决这类问题。
例如,你可以将 LD_RUNPATH_SEARCH_PATHS 设置为:
@executable_path/Frameworks
这告诉动态链接器在可执行文件所在目录的 Frameworks 子目录下搜索库文件。
注意:使用 LD_RUNPATH_SEARCH_PATHS 时需要小心,确保你知道自己在做什么,以避免潜在的运行时链接问题。
最好的做法是只在确实需要时使用,而不是过度依赖这个设置。
二、当我们向工程中拖入一个framework时发生了什么
1、系统帮我们做了两件事情
配置搜索路径:告诉去哪里搜索framework
framework search path
配置链接器,告诉链接器要链接的framework的名称
ld -framework 名称
三、手动来做
知道了原理,我们就可以手动来做
# 主要用于配置运行时动态链接器(ld)在程序运行时查找动态链接库(dylib)的路径。
LD_RUNPATH_SEARCH_PATHS = "/Applications/Xcode.app/Contents/SharedFrameworks" "/Applications/Xcode.app/Contents/Frameworks" "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"
# 主要用于告诉编译器在编译时查找框架(framework)的路径。
FRAMEWORK_SEARCH_PATHS = "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"
# -Xlinker 接的参数--》ld(不是clang转)
OTHER_LDFLAGS = -framework DevToolsCore -Xlinker -U -Xlinker _IDEInitialize
# 头文件搜索路径
HEADER_SEARCH_PATHS = "${SRCROOT}"
PS:如果想深入的研究xcode自带的动态库,可以拿到大神导出的头文件自己研究
ruby环境和vscode调试环境配置
一、ruby介绍
Ruby目前主要局限在在Web领域与精致项目
$ gem info ruby-macho
*** LOCAL GEMS ***
ruby-macho (2.5.1)
Author: William Woodruff
Homepage: https://github.com/Homebrew/ruby-macho
License: MIT
Installed at: /opt/homebrew/lib/ruby/gems/3.2.0
ruby-macho - Mach-O file analyzer.
gem install 是用于安装全局 Gems 的命令,gem install 安装 Gems 到系统范围
xy:Gems是所有包的总称,比如keyll是Gems中的其中一个Gem,pod也是其中一个Gem
xy:gem install 全军安装Gems,所有项目都可以使用
bundle install 是用于安装项目所需 Gems 的命令。不是全局安装,并根据 Gemfile 文件中的依赖关系进行管理。
xy:bundle install是为当前项目服务的,bundle install 跟 pod install 是相似的
xy:bundler是管理工具,bundle是bundler的助手
二、ruby项目的调试
项目调试,参考 Ruby
标签下的 Ruby调试
这篇博客
xcodeproj项目调试
从github下载最新的xcodeproj项目
拖进vscode,配置launch.json文件
在gemfile目录下执行bundle install。版本冲突可尝试删除gemfile.lock文件后执行bundle install
启动调试器
cocoapods项目调试
从github下载最新的cocoapods项目
创建自己的iOS项目
将两个项目放在同一目录下RbDemo,拖进vscode
配置launch.json文件
{
"version": "0.2.0",
"configurations": [
{
"type": "rdbg",
"name": "Debug",
"request": "launch",
"script": "${workspaceFolder}/CocoaPods-master/bin/pod",
"cwd": "${workspaceFolder}",
"useBundler": true,
"debugPort": "1236",
"args": [
"install",
"--project-directory=./LGApp"
]
}
]
}
在gemfile目录下执行bundle install。版本冲突可尝试删除gemfile.lock文件后执行bundle install
启动调试器,我们就可以使用CocoaPods项目中的pod来管理我们的ios项目了,而不是使用系统中安装的pod
遇到了一次调试器启动失败,关闭vscode重新进入好了。
行者常至,为者常成!