使用nstask工具时出现dysmutil malloc错误代码为134

时间:2015-12-24 12:01:00

标签: xcode malloc nstask xbuild dsymutil

这是我用来在我的cocoa app中使用nstask生成ios构建的代码。

NSTask *task=[[NSTask alloc]init];
task.launchPath=@"/library/Frameworks/Mono.Framework/Commands/xbuild";
task.arguments= @[@"/p:Configuration=Release",@"/p:Platform=iPhone",@"/p:BuildIpa=false",@"/target:Build",@"/Users/xyz/Projects/SimpleDemo/SimpleDemo.sln"];
NSPipe *pipe=[[NSPipe alloc]init];
[task setStandardOutput:pipe];
NSFileHandle *outputFileHandle;
outputFileHandle = [[NSFileHandle alloc]init];
outputFileHandle=[pipe fileHandleForReading];

[outputFileHandle waitForDataInBackgroundAndNotify];

[[NSNotificationCenter defaultCenter] addObserverForName:NSFileHandleDataAvailableNotification object:outputFileHandle queue:nil usingBlock:^(NSNotification *notification){

    NSData *output = [outputFileHandle availableData];
    NSString *outStr = [[NSString alloc] initWithData:output encoding:NSUTF8StringEncoding];
    NSLog(@"%@",outStr);

    [outputFileHandle waitForDataInBackgroundAndNotify];

}];
@try {
    [task launch];
    [task waitUntilExit];
}
@catch (NSException *exception) {
    NSLog(@"%@",[exception callStackSymbols]);

}
@finally {

}

运行代码时出现此错误

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iO S.Common.targets:错误:工具退出代码:134。输出:警告:(armv7)找不到对象文件符号_xamarin_register_modules的符号 警告:(armv7)找不到符号_xamarin_register_assemblies的目标文件符号 警告:(armv7)找不到符号_xamarin_setup的目标文件符号 警告:(armv7)找不到符号_main的目标文件符号 警告:(armv7)找不到符号的对象文件符号_OBJC_METACLASS _ $ _ MonoTouchAppDelegate 警告:(armv7)找不到符号的对象文件符号_OBJC_CLASS _ $ _ MonoTouchAppDelegate

dsymutil(6764,0x7fff78631000)malloc: *对象0x6000000fb400的错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试

在此构建过程中出现错误.app生成意味着.app生成后出现问题。

注意:如果我使用终端运行此命令,那么它可以正常工作并且生成.ipa。问题仅在我使用nstask运行此命令时。

我正在使用el capitan和xcode 7.1.1。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

根据@Itachi的建议,问题是关于启用MallocNanoZone。这需要明确地从NSTask的环境中删除。

以下是我从IPABuddy

获取的代码
        NSTask *task=[[NSTask alloc]init];

        NSMutableDictionary *theEnvironment = [[NSProcessInfo processInfo].environment mutableCopy];
        if (theEnvironment[@"MallocNanoZone"])
        {
            [theEnvironment removeObjectForKey:@"MallocNanoZone"];
        }

        task.environment = theEnvironment;

希望这有帮助。