Tag: shell

快速运行Shell进程

每当我想进行一些快速脚本编写(例如创建大量随机测试用例以测试某些python程序)时, perl通常是我选择的语言。 当然,几天后很难理解,但是对于快速又脏的东西,它的工作非常出色。 主要优点之一是,从perl运行shell命令非常简单:您只需在反斜杠中写一些东西: `echo“ foo”` 例如,这使我很容易在计算出要使用的测试输入后调用适当的python脚本,然后在过程完成后验证输出。 为了将脚本编写过程切换到Swift,我想知道是否有可能这样做。 事实证明,在Foundation中有一个名为Process的类可以做到这一点。 但是,像大多数基础课程一样,它非常灵活,这也意味着有很多样板要进行。 这是我尝试将其转换为简单的函数调用。 首先,我在Google上搜索了一些使用Process类的代码片段,这样我就可以获得一种初步的方法。 事实证明,我还需要使用Pipe类来捕获输出。 真正困扰我的是,我正在尝试测试的程序需要从stdin读取其输入。 我想给它提供一个普通的字符串(而不是编写它来读取一个文件,这似乎太麻烦了),但是我找不到用Pipe做到这一点的方法-官方文档使我在其他方面进展顺利但这使我失败了。 然后,解决方案:将输入内容写入临时文件,使用该文件作为输入来运行该过程,然后删除该文件。 笨拙,有点太笨拙了,但是我知道了。 考虑到我以为刚开始时这甚至是不可能的,因此产生的功能出奇地好。 我只是用它们来创建一些测试功能并成功地对一些作业进行评分。 最终代码在下面的要点中:

Xcode构建阶段和环境

如何教Xcode尊重环境。 如果您曾经做过iOS开发,那么您肯定会使用Xcode Build Phases。 构建阶段可以执行的任务之一就是运行Shell脚本,这是您可能会遇到的一个特殊问题…… 问题在于,在Xcode构建阶段中运行的Shell脚本无法获取用户Shell配置文件。 尝试将以下内容放入您的外壳配置文件中: Shell配置文件中的任何消息都不会显示。 原因是从Xcode构建阶段运行的外壳是非交互式外壳。 它实际上不是错误,而是预期的行为,但这可能会使您感到困惑。 这个例子 举例来说,假设您有一个要在Xcode构建阶段中运行的Ruby脚本。 该脚本恰好使用了2.5.x Ruby语言功能,而这些功能在2.3.x中不可用。 您还使用RVM来安装和使用版本2.5.x。 现在,将ruby –version添加到构建阶段,构建项目并检查输出。 在Mojave OS X上,输出为2.3.7 ,这是系统Ruby版本。 通常在外壳程序配置文件中定义的RVM环境都没有加载到脚本中。 解决此问题的一种方法是使用登录外壳程序。 就像在构建阶段的“ Shell”参数中添加-l一样简单,例如/bin/sh -l 。 但是,它不适用于Bourne shell(sh)。 但随后它将适用于再次使用Bourne的shell(bash),因此您可以将“ Shell”参数更改为/bin/bash -l 。 您现在将在日志中看到以下内容: 加载〜/ .bash_profile 那行得通,但并不理想。 如果团队中有很多开发人员,他们的~/.bash_profile可能会发生各种各样的事情,而您不一定要在Xcode构建阶段中运行它们。 您只需要加载RVM环境,别无其他。 其他开发人员也可以使用zsh或其他类型的shell。 构建阶段脚本 解决此问题的另一种方法是仅在每个构建阶段脚本中提供重要的内容。 例如,要使用RVM在非交互式shell中加载Ruby版本,可以使用以下代码: 尽管此方法可能需要更多工作,但由于以下几个原因,它仍然是更好的方法: 您只加载运行脚本所需的内容,而不加载用户的shell配置文件中的所有内容 根据项目的.ruby-version文件选择Ruby版本,而采用登录Shell方法时,将加载为RVM全局设置的默认Ruby版本,并且您必须运行额外的代码才能切换到正确的版本 提示 有关使用Shell脚本构建阶段的一些技巧。 脚本错误 如果shell脚本返回的错误代码不是0 ,例如/bin/sh -e ,则构建阶段的Add -e标志将失败。 管理构建阶段脚本 […]

从Xcode打开终端

使用Xco的第三方工具(如CocoaPods)在Xcode中进行iOS开发,我经常发现自己需要在项目位置打开终端窗口。 尽管起初我就像是使用Terminal的黑客(就像我当时使用的n00b一样),但很快就变得很无聊和乏味。 我的第一个解决方案是在Finder中添加“在此位置打开终端”服务,因此我可以右键单击项目文件夹,然后打开一个预选该位置的“终端”窗口。 这种方法需要您通常通过单击项目文件上的“在Finder中显示”来跳出Xcode,以完成此重要任务。 因此,我在网上进行了搜索,并迅速从几个不同的来源收集了一个解决方案,使我可以直接从Xcode使用键盘快捷键来打开“终端”窗口。 TL; DR这是您需要做的: 1.使用您喜欢的文本编辑器创建一个新的文本文件,并将其放入其中: #! / bin / bash 打开-a终端“ $ SRCROOT” 2.使用.sh扩展名将其保存在某个永久位置,您每天都不会看到它,因此它会惹恼您,并且您不会误删除它。 3.导航到使用Terminal刚创建的脚本文件的位置,并使用以下命令更改其权限: chmod + x 其中应该替换为刚创建的.sh文件的名称。 3.在Xcode中,转到“首选项”->“行为”,然后单击底部的加号以添加新行为并将其命名为“ Open Terminal” 4.仅勾选最后一个复选框,其中显示“运行”,然后选择.sh文件的位置。 5.单击行为名称右边的小⌘符号,然后为您的行为选择新的键盘快捷键。 我建议:ctrl + alt + command + t。 就是这样,您完成了! 参考文献: raywenderlich.com — Xcode技巧和窍门

如何访问我的iphone本身的日志文件

所以我的应用程序不断崩溃,失去了在控制台输出的所有日志。 我决定越狱的手机,并使用此代码写入文件: +(void)Log:(NSString *)content { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* docDir = [paths objectAtIndex:0]; NSString * logFile = [docDir stringByAppendingString:@"/log.txt"]; NSData *dataToWrite = [content dataUsingEncoding: NSUTF8StringEncoding]; NSFileHandle* outputFile = [NSFileHandle fileHandleForWritingAtPath:logFile]; [outputFile seekToEndOfFile]; [outputFile writeData:dataToWrite]; [outputFile closeFile]; } 如果我放置一个断点, outputFile的值如下所示:/var/mobile/Applications/B8AB0D75-7FBE-4C5B-8D48-2ABCE9C7564D/Documents/log.txt 我通过cydia在手机上安装了vim,并且在上述目录中没有log.txt! (我已经通过SSH 隧道 SSH到我的iPhone使用iPhone隧道作为根SSH。在另一个尝试,我手动创build使用VIM log.txt并再次运行代码..仍然没有任何东西被附加到文件..任何想法?

使用带有ios参数的Xcode运行shell脚本

我有一个bash脚本,我不想从一个应用程序的参数开始。 目前我可以生成命令,但是我怎样才能执行它? 这个程序只适用于越狱手机。 任何解决scheme? search了很多,但没有发现任何东西。

通过terminal批量构build和存档iOS应用程序

我正在尝试简化iOS应用发布的构build – >归档 – >提交过程。 我们有超过50个移动应用具有几乎相同的框架,但具有不同的graphics和configuration设置。 我通常会在xcode 4.2中加载每个项目,然后使用xcode GUI来构build – >归档 – >提交通常的方式,但是现在我们已经有超过50个应用程序,而且这个过程在我们推出更新的时候非常麻烦。 这就是说,我正在尝试使用shell函数来加速这个过程。 我做了大量的研究,发现xcodebuild (见里德的答案)应该工作,但是档案选项不工作,因为我得到以下错误: unsupported build action 'archive' 所以我写了以下内容: # $1 should be a date like: 2012-07-17 # $2 should be a time like: 10.31AM # $mybase will be the current directory at the time the function was called # so make sure […]