相关疑难解决方法(0)

应用源何时需要包含在测试目标中?

在一个新项目中,我有这个简单的测试

#import <XCTest/XCTest.h>
#import "ViewController.h"

@interface ViewControllerTests : XCTestCase
@end

@implementation ViewControllerTests

- (void)testExample
{ 
    // Using a class that is not in the test target.
    ViewController * viewController = [[ViewController alloc] init];
    XCTAssertNotNil(viewController, @"");
}

@end
Run Code Online (Sandbox Code Playgroud)

ViewController.h 不是测试目标的一部分,但它编译并运行测试没有任何问题.

在此输入图像描述

我认为这是因为应用程序首先构建(作为依赖)然后是测试.链接器然后找出ViewController类是什么.

但是,在较旧的项目中,使用完全相同的测试和ViewController文件,构建在链接器阶段失败:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_ViewController", referenced from:
  objc-class-ref in ViewControllerTests.o
Run Code Online (Sandbox Code Playgroud)

即使创建了新的XCTest单元测试目标,也会发生此链接器错误.

为了解决这个问题,可以在应用程序和测试目标中包含源(勾选上图中的两个框).这会在模拟器的系统日志中导致重复符号的构建警告(打开模拟器并按cmd- /查看):

Class ViewController is implemented in both 
[...]/iPhone Simulator/ [...] /MyApp.app/MyApp and 
[...]/Debug-iphonesimulator/LogicTests.octest/LogicTests. 
One of the two will be used. Which one is undefined.
Run Code Online (Sandbox Code Playgroud)

这些警告偶尔会导致以下示例说明的问题: …

xcode unit-testing objective-c ios xctest

69
推荐指数
4
解决办法
2万
查看次数

Xcode:复制标题:公共与私有与项目?

我正在构建一个Cocoa Touch静态库.我应该如何决定是否将头文件复制为公共,私有或项目?

xcode header static-libraries

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

来自一个代码库的多个应用程序 - Xcode中的多个项目或目标?

我正在开发一个iOS应用程序.现在它是一个应用程序和两个目标(应用程序和测试).

接近发布我想将这个应用程序分成三个带有大量共享代码和共享测试的应用程序.(想想App Store的免费版和完整版以及不会发布的原型应用程序).

你会在Xcode(1个图书馆项目和3个应用程序项目)中设置多个项目,还是将所有项目保存在一个项目中,只设置多个目标?

xcode ios

22
推荐指数
1
解决办法
6298
查看次数

如何教Xcode在静态库项目的输出中包含所有头文件?

我按照教程创建了一个静态库项目.然后我拖入我的课程并将它们添加到目标中.

当我构建并运行时,它会创建一个libUtils.a文件.在Finder中显示时,include文件夹仅包含Xcode在创建项目时自动创建的第一个类的头文件.缺少所有其他头文件.

我仔细检查:所有添加的类文件都是项目的一部分,检查器显示目标项目的目标成员资格复选标记.

这是Xcode中的错误还是我必须在其他地方注册我创建的所有文件?

xcode static-libraries ios

10
推荐指数
1
解决办法
1万
查看次数

Swift 链接错误:Module.Class 的类型元数据访问器

Swift项目中工作时,我有两个模块,比方说

  1. Base
  2. Feature

Base有一个SHService类,我从那里调用Feature模块的函数(类SHCommon)。功能模块正在无错误地构建,但Base在链接阶段引发错误。

工作区快照:

基础服务

import Foundation
import Feature

class SHService {

    public func printMe(printString: String){
        SHCommon().printMe(printString: printString)
    }
}
Run Code Online (Sandbox Code Playgroud)

Feature.SHCommon

import Foundation

public class SHCommon {

    public init(){}
    public func printMe(printString: String) {
        print(printString)
    }
}
Run Code Online (Sandbox Code Playgroud)

链接错误:

知道为什么会这样吗?

xcode compiler-errors build ios swift

9
推荐指数
3
解决办法
4196
查看次数

每个框架内的 module.modulemap 文件中的 export * 是什么?

我创建了一个名为 的框架Communication,框架容器内有一个module.modulemap文件。

模块.modulemap

framework module Communication {
  umbrella header "Communication.h"

  export *
  module * { export * }
}
Run Code Online (Sandbox Code Playgroud)

我可以理解该模块需要伞头将其暴露给包含应用程序/目标。

但是其他两行代码的含义是什么。

  export *
  module * { export * }
Run Code Online (Sandbox Code Playgroud)

如果有人知道这条线出口的是什么?

iphone frameworks ios swift swift4

7
推荐指数
1
解决办法
3549
查看次数