相关疑难解决方法(0)

使用@testable时,"模块未编译用于测试"

我正在尝试使用Swift 2的新@testable声明来将我的类暴露给测试目标.但是我收到这个编译错误:

在此输入图像描述

Intervals是包含我试图公开的类的模块.我该如何摆脱这个错误?

unit-testing ios swift swift2

138
推荐指数
6
解决办法
2万
查看次数

类X在<framework>和<application>中实现,将使用其中一个,其中一个是未定义的

我收到这个警告:

Class X is implemented in both <framework> and <application> one of the two will be used, which one is undefined
Run Code Online (Sandbox Code Playgroud)

这个警告在网络上有很多内容,但我没有发现任何可以解决我遇到的具体问题的内容.

脚本

我已经构建了MyFramework和MyApplication(作为MyFramework的测试/演示应用程序).

MyFramework使用CocoaPod(我将其称为CoolPod),我也想在MyApplication中使用它(并且假设MyFramework的消费者也是合理的).

我需要能够将MyFramework分发为.framework(用于封闭源代码).但是,这意味着MyFramework将CoolPod嵌入其编译库中.

现在当我将MyFramework和CoolPod导入MyApplication时,我得到了这个冲突(输出上面显示的警告),因为CoolPod的类已经包含在MyFramework的库中(因为嵌入了CoolPod).

所以我们有这个结构:

CoolPod -> MyFramework \
                        MyApplication
               CoolPod /
Run Code Online (Sandbox Code Playgroud)

我该如何避免这种冲突?

  • 有没有办法让我的MyApplication向MyFramework提供CoolPod?
  • 我是否必须通过MyFramework管理CoolPod的标题?

我曾考虑在MyApplication中包含CoolPod的头文件(但不包括它的lib),但这对于一个简单的案例来说似乎过于复杂.

非常感谢任何帮助,这实在是在阻止我.

谢谢,

靛青

ios ios-frameworks cocoapods

41
推荐指数
1
解决办法
9264
查看次数

使用XCode 4链接单元测试错误?

我想在我的XCode应用程序中为类编写一些逻辑单元测试.在Xcode 4中,我在Project Navigator中单击了项目名称,然后从底部单击Add Target.我选择了其他的"Cocoa Touch Unit Testing Bundle",给新目标一个"测试"的"产品名称",并完成.

因为我要测试的类是作为现有应用程序目标的一部分编译的,所以对于我的新"测试"目标,我立即转到Build Phases选项卡并将我现有的应用程序目标添加为唯一的目标依赖项.

然后我转到创建的tests.m文件,导入我要测试的类(在它下面ReleasePlanManager,并调用它的一个方法.但链接器失败,出现如下错误:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ReleasePlanManager", referenced from:
      objc-class-ref in tests.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

所以这个类是找不到的,即使(根据我的理解)添加应用程序目标(它是其中的一部分)应该足够了吗?

任何帮助将不胜感激.谢谢!

xcode linker unit-testing objective-c ocunit

23
推荐指数
1
解决办法
6657
查看次数

isKindOfClass意外返回NO

我的一个单元测试失败了,原因是我没有预料到.似乎是一个调用isKindOfClass返回NO,但是当我调试并逐步执行时,它似乎没有理由.

代码是:

if ([self.detailItem isKindOfClass:[MovieInfo class]]) {
    [self configureViewForMovie];
}
Run Code Online (Sandbox Code Playgroud)

我逐步完成了代码并做了:

po self.detailItem
Run Code Online (Sandbox Code Playgroud)

显示:

(id) $1 = 0x0ea8f390 <MovieInfo: 0xea8f390>
Run Code Online (Sandbox Code Playgroud)

那么,我错过了什么,为什么在这种情况下if语句会返回false?

编辑:

这是DetailItem的setter:

- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        NSLog(@"%@", [newDetailItem class]);
        _detailItem = newDetailItem;

        // Update the view.
        [self configureView];
    }

    if (self.masterPopoverController != nil) {
        [self.masterPopoverController dismissPopoverAnimated:YES];
    } 
}
Run Code Online (Sandbox Code Playgroud)

它是Master Detail模板的模板代码.

单元测试在setUp中创建一个MovieInfo:

movie = [[MovieInfo alloc] initWithMovieName:@"Movie" movieID:1];
Run Code Online (Sandbox Code Playgroud)

并在测试中设置它

controller.detailItem = movie;
Run Code Online (Sandbox Code Playgroud)

另外,我添加了一个参数断言setDetailItem:

NSParameterAssert([newDetailItem isKindOfClass:[MovieInfo class]] || [newDetailItem isKindOfClass:[PersonInfo class]] || newDetailItem …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c

18
推荐指数
1
解决办法
4205
查看次数

类_NSZombie__GEOTileKeyWrapper在两者中都实现了?和?? ?? 将使用两者之一.哪一个未定义

调试我的应用时,我有此消息:

NSZombie _GEOTileKeyWrapper在两者中都实现了?和?? ?? 将使用两者之一.哪一个未定义.

你知道这是什么吗?以及如何解决它?

iphone debugging nszombie

9
推荐指数
1
解决办法
8546
查看次数

在Podfile中包含Firebase/Auth的EXC_BAD_ACCESS代码= 2

在Podfile中包含"Firebase/Auth"后,我收到了EXC_BAD_ACCESS.发生这种情况时不添加任何firebase代码行.我在xcode 8上使用swift3,结果pod是 -

Installing Firebase (3.8.0)
Installing FirebaseAnalytics (3.5.1)
Installing FirebaseAuth (3.0.6)
Installing FirebaseCore (3.4.4)
Installing FirebaseInstanceID (1.0.8)
Using GTMOAuth2 (1.1.4)
Using GTMSessionFetcher (1.1.7)
Using GoogleAppUtilities (1.1.2)
Installing GoogleInterchangeUtilities (1.2.2)
Using GoogleSignIn (4.0.1)
Using GoogleSymbolUtilities (1.1.2)
Installing GoogleToolboxForMac 2.1.0 (was 2.1.0)
Using Localize-Swift (1.6)
Using ProtocolBuffers-Swift (3.0.6)
Using QorumLogs (0.9)
Run Code Online (Sandbox Code Playgroud)

错误出现在线程1中 [UIViewController(FIRAScreenClassName) fira_viewDidAppear:]:

仅当pod目标本身是最终嵌入应用程序的框架时才会发生这种情况.

我也有谷歌分析.是因为ARC未启用吗?我如何在xcode-8上执行此操作?还有其他选择吗?

firebase firebase-authentication swift3 xcode8

9
推荐指数
1
解决办法
1638
查看次数