iOS Ionic版本失败

时间:2016-06-03 12:02:21

标签: ios cordova ionic-framework

我尝试在离子到IOS中构建我的应用程序然而当我尝试离子构建iOS时出现错误。这是错误代码

建立失败

以下构建命令失败:

  

CompileC   建立/ varfinz.build /调试-iphonesimulator / varfinz.build /对象 - 正常/ I386 / CDVFile.o   varfinz / Plugins / org.apache.cordova.file / CDVFile.m正常i386   objective-c com.apple.compilers.llvm.clang.1_0.compiler(1 failure)

     

错误:命令的错误代码65:带args的xcodebuild:   -xcconfig,/用户/洛伦佐/桌面/ varfinz5 /平台/ IOS /科尔多瓦/集结debug.xcconfig,-project,varfinz.xcodeproj,ARCHS = I386,-target,varfinz, - 构型,调试-sdk,iphonesimulator,构建,VALID_ARCHS = I386,CONFIGURATION_BUILD_DIR = /用户/洛伦佐/桌面/ varfinz5 /平台/ IOS /建造/仿真器,SHARED_PRECOMPS_DIR = /用户/洛伦佐/桌面/ varfinz5 /平台/ IOS /建造/ sharedpch

以下是包含错误的代码部分。错误发生在第3行,代码片段为self =(CDVFile *)[super initWithWebView:theWebView]; Xcode说:"没有可见的@interface for CDVPlugin声明选择器initWithWebView

- (id)initWithWebView:(UIWebView*)theWebView
{
    self = (CDVFile*)[super initWithWebView:theWebView];
    if (self) {
        filePlugin = self;
        [NSURLProtocol registerClass:[CDVFilesystemURLProtocol class]];

        fileSystems_ = [[NSMutableArray alloc] initWithCapacity:3];

        // Get the Library directory path
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        self.appLibraryPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"files"];

        // Get the Temporary directory path
        self.appTempPath = [NSTemporaryDirectory()stringByStandardizingPath];   // remove trailing slash from NSTemporaryDirectory()

        // Get the Documents directory path
        paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        self.rootDocsPath = [paths objectAtIndex:0];
        self.appDocsPath = [self.rootDocsPath stringByAppendingPathComponent:@"files"];

    }

    return self;
}

2 个答案:

答案 0 :(得分:3)

您可以通过两种方式解决此问题:

1- public static string DoSomething(string base = "DEFAULTVALUE") { if (base == "DEFAULTVALUE") { // Then base was not specified. } } 替换[super initWithWebView:theWebView]

2-向CDVFile添加编译器标志以禁用ARC,编译器标志为[super init]

从我的观点来看,我推荐第二种解决方案,因为它不会影响代码。

如果您正在寻找一步一步的解决方案,请在Xcode中执行以下操作。

  1. 选择您的主项目。
  2. 选择目标
  3. 转到构建阶段
  4. 展开已编译的资源点击
  5. 选择“CDVFile.m”
  6. 在“CDVFile.m”的右侧,可以添加以下编译器标志

    -fno-objc弧

  7. 现在,如果您想详细了解问题:

    CDVFile是在非ARC环境下构建的,他控制着自己的内存消耗。 但Xcode不允许这样做,因为它使用ARC来控制整个应用程序的内存消耗。 所以解决这个冲突的方法是修改CDVFile代码以使用ARC,或者通过添加编译器标志告诉Xcode你负责这个类的内存管理。

    <强>更新 注意:每次添加平台时都应该完成上述两种解决方案。

    要彻底解决问题,请执行以下操作:

    1. 转到插件文件夹
    2. 找到导致问题的插件(在本例中为:cordova-plugin-file)
    3. 打开plugin.xml文件
    4. 找到-fno-objc-arc
    5. 找到以下标记:<platform name="ios"> 并将其替换为:<source-file src="src/ios/CDVFile.m"/>
    6. 删除并添加ios平台,您就完成了。

答案 1 :(得分:0)

我间歇性地遇到这个问题。虽然我不能说出问题的根本原因,但以下内容适用于我 - 来自CLI:

cordova platform remove ios
ionic serve
cordova platform add ios