多くのことを行うCocoaアプリケーションがありますが、それらの中でXCodeでiOSプロジェクトをクリーンアップして再構築します。 Cocoaアプリケーションは、XCode 4.1を使用して開発され、OS X 10.7(NSTask終了ハンドラのため)でのみ動作します。私は数ヶ月間触れていませんでした.XCode 4.2にアップグレードした後、xcodebuildを実行した最初のNSTaskだけが実際に何かをしたことがわかりました。その後の呼び出しは何も行いません。Cocoaアプリケーションからxcodebuildを2回実行すると(NSTask経由で)自動的に失敗します。
いくつかの詳細:
- は、構築されるiOSのプロジェクトは、ココアアプリのリソースバンドルの中に座っています。基本的に、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にアップグレードした後にのみ発生します。私は間違った何かをしているに違いないが、何?
ARCを使用してプロジェクトを行っていますか? –
です。実際には、タスク1のterminationHandlerが決して実行されないことに気付きました。 ... Aaand検索の少し後、私は答えを見つけました。今すぐ書いてください。 – churowa