在 Xcode Bots 触发器中安装 Pod

Posted

技术标签:

【中文标题】在 Xcode Bots 触发器中安装 Pod【英文标题】:Pod Install in Xcode Bots Trigger 【发布时间】:2016-09-15 22:39:35 【问题描述】:

我通过以下方式启动了预集成触发器

cd "$XCS_PRIMARY_REPO_DIR"
pwd
pod install --verbose

它给了我

pod: command not found

简单吧?找不到 pod 二进制文件,所以我将其指向路径。很简单。

cd "$XCS_PRIMARY_REPO_DIR"
pwd
/usr/local/bin/pod install --verbose

这给了我以下内容

env: ruby_executable_hooks: No such file or directory

这让我觉得 ruby​​ 没有正确设置为运行触发器。现在了解构建服务器终端中的简单“pod install”修复了所有这些并运行良好且花花公子。该项目肯定会在构建服务器上正确构建。

因此,由于我认为环境混乱,我将尝试从包装器目录运行它,它应该设置得很好。这就是它的目的吗?每当我需要 ruby​​ 在构建的运行脚本阶段运行时,这一直有效。所以我们开始触发。

~/.rvm/wrappers/ruby-2.2.3@global/pod install

我在构建服务器的终端中测试了这个,它很酷,所以我把它放到触发器中,我得到了这个

/Users/XcodeServer/.rvm/wrappers/ruby-2.2.3@global/pod: line 7: exec: pod: not found

:/ 好吧,我破解 pod 源代码,看看它在第 7 行的内容

exec pod "$@"

我不是红宝石人,但这对我来说没有任何意义。哦,是的,我尝试将 cocoapods 直接下载到 usr/local/bin,而不是让它安装到其他目​​录中,首先卸载所有 cocoapods,然后执行以下操作

sudo gem install -n /usr/local/bin cocoapods --pre

我放 --pre 是因为我需要 1.1.0.rc.2 来修复构建 swift 3 的错误。任何人,这一切都行不通。似乎其他人都可以简单地把

cd /path/to/proj/
pod install

进入他们的 Xcode 机器人触发器并让它们工作。

【问题讨论】:

我在同一条船上。你搞定了吗? 我让我的触发器运行了一个脚本。我会回答这个问题。 【参考方案1】:

我让触发器在执行 pod 安装的构建服务器上运行脚本。

所以在你的构建服务器上创建一个 shell 脚本,它具有以下内容:

#make sure the encoding is correct
export LANG=en_US.UTF-8

# fix the path so Ruby can find it's binaries
export PATH=/usr/local/bin:$PATH
echo "PATH: $PATH"

# update or install depending on what we got
if [ -d $PODS_DIR ]; then 
    # pods directory exist
    echo "=================="
    echo "   Delete Pods"
    echo "=================="

    # delete cocoapods files if they exist
    rm -rf "$PODS_DIR"
    eval rm "$BS_SRCROOT/Podfile.lock"
    eval rm -rf "$BS_SRCROOT/$BS_EXECUTABLE_NAME.workspace"
    echo "Deleted Pods directory $PODS_DIR"
    echo "Deleted $BS_EXECUTABLE_NAME.workspace"
    echo "Deleted Podfile.lock"
else 
    # no need to delete pod files
    echo "Pods NOT detected at $PODS_DIR"
fi

echo "=================="
echo "   Install Pods"
echo "=================="

# make sure we are where we need to be
eval cd "$BS_SRCROOT"
pwd
~/.rvm/wrappers/ruby-2.2.3@global/pod install

请记住在命名脚本时使用“sh”后缀。然后在你的机器人触发器中运行这样的脚本

sh ~/Path/to/Scripts/podUpdateHack.sh

有点傻,但它有效,¯\_(ツ)_/¯ 哦,是的,所有那些愚蠢的 eval 都在那里,因为 BS_SRCROOT 是 XCode 机器人上的环境变量,它引用环境变量 $XCS_PRIMARY_REPO_DIR。您可以将其替换为 $XCS_PRIMARY_REPO_DIR 并删除评估。我不记得是谁定义了可能来自工作区的 PODS_DIR,而 BS_EXECUTABLE_NAME 是对项目中可执行文件名称的重新定义,因为此时它不存在。

希望对兄弟有所帮助。

【讨论】:

【参考方案2】:
#!/bin/sh
cd ProjectDirectory
/usr/local/bin/pod install

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。 这通过更简单的解决方案解决了问题。不知道为什么这被否决了!【参考方案3】:

设置默认路径,执行 .bash_profile,然后你的机器人就像普通用户一样运行

#!/bin/sh
cd $XCS_PRIMARY_REPO_DIR
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands"
. ~/.bash_profile
bundle install
pod install --repo-update

附: bundle install 安装在我的 Gemfile 中指定的所有 gem,如下所示(因此每个机器人可以有不同的 gem 要求):

source 'https://rubygems.org'
gem 'cocoapods', '1.3.1'

【讨论】:

以上是关于在 Xcode Bots 触发器中安装 Pod的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Bots 配置文件的位置

Pod install 未在 Flutter 应用程序中安装 Pod

Xcode Bots 缺乏创建 Pods 目录的写权限。

无法在 xcode 9.2 项目中安装 Cocoapods

Xcode集成POD教程

在 vps 中安装 virtualmin 的问题