JHHK

欢迎来到我的个人网站
行者常至 为者常成

3.ruby环境配置

目录

快速开始

一、两个知识点

@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重新进入好了。


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.