gpt4 book ai didi

objective-c - 从 Cocoa 应用程序(通过 NSTask)运行 xcodebuild 两次会失败

转载 作者:行者123 更新时间:2023-12-03 17:15:01 24 4
gpt4 key购买 nike

我有一个 Cocoa 应用程序,它可以做很多事情,但其中使用“xcodebuild”在 XCode 中清理和重新构建 iOS 项目。 Cocoa 应用程序是使用 XCode 4.1 开发的,并且仅在 OS X 10.7 上运行(因为 NSTask 终止处理程序)。我已经几个月没有碰它了,升级到 XCode 4.2 后,我发现只有第一个运行 xcodebuild 的 NSTask 实际上做了任何事情。后续调用不会执行任何操作。

一些细节:

  • 正在构建的 iOS 项目位于 Cocoa 应用程序的资源包中。基本上,Cocoa 应用程序是 iOS 项目的包装器。想象一个带有红色大按钮的 GUI,上面写着:“为我构建一个 iOS 应用程序!”
  • 这段代码在 XCode 4.1 中完美运行。任务 1 执行,然后在任务 1 的终止处理程序中调用任务 2,并且运行得很好。问题是任务 2 根本不再运行。
  • 我已经升级到 Xcode 4.3,这要求我还安装独立的 Xcode 命令行工具。但代码仍然无法正常工作。
  • 我可以在终端中运行“xcodebuild clean”和“xcodebuild”命令,没有任何问题。

下面是违规代码的(释义)版本。

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self runTaskOne];
}

// Clean the iOS Project
- (void) runTaskOne
{
NSTask *task = [[NSTask alloc] init];
[task setCurrentDirectoryPath:@".../myproject/DerivedData/myproject/Build/Products/Debug/myproject.app/Contents/Resources/iOSProjectFolder"];
[task setLaunchPath:@"/usr/bin/xcodebuild"];
[task setArguments:[NSArray arrayWithObjects:@"clean", nil]];
[task setTerminationHandler:^(NSTask *task)
{
[self runTaskTwo];
}];
[task launch];

}

// Build the same iOS project that was just cleaned
- (void) runTaskTwo;
{
NSTask *task = [[NSTask alloc] init];
[task setCurrentDirectoryPath:@".../myproject/DerivedData/myproject/Build/Products/Debug/myproject.app/Contents/Resources/iOSProjectFolder"];
[task setLaunchPath:@"/usr/bin/xcodebuild"];
[task launch];
}

@end

所以重申一下:任务 1(清理)工作正常。任务 2(构建)似乎还没有启动。仅在升级到 XCode 4.2 后才会观察到此行为。我肯定做错了什么,但是什么?

最佳答案

似乎我在 Xcode 中遇到了一个错误,类似于: NSTask NSPipe - objective c command line help

基本上,如果 NSTask 已经启动过一次,Xcode 将保留 NSTask 的输出。

解决方案是这样切换任务的标准输入:

[task setStandardInput:[NSPipe pipe]];

一旦我将其放入 runTaskOne 方法中,一切就开始正常工作。

关于objective-c - 从 Cocoa 应用程序(通过 NSTask)运行 xcodebuild 两次会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com