“架构arm64的未定义符号:”用于测试中的swift函数

时间:2014-09-30 00:10:59

标签: ios xcode swift

我的Swift项目中有两个目标:

  1. 应用
  2. 测试
  3. 应用目标中有一个功能未在应用中的任何位置使用,但它在测试中使用。结果我得到了构建错误:Undefined symbols for architecture arm64:。它说该函数是未定义的,它是从测试中引用的。

    看起来编译器会从app中删除这个未使用的函数。

    问题:如何在应用内置中包含未使用的功能?

    注意:我不想将应用程序的源文件添加到测试目标的Compile Sources。我更喜欢将应用程序的功能标记为public,然后在测试中导入应用程序模块。

    当前(不完美)解决方案

    以下是我目前如何构建应用程序中未使用的功能。这样我就可以在测试中使用它们了。

    class IncludeUnusedHack {
      init() {
        if NSDate.date().timeIntervalSinceNow > 10_000_000 {
          MyClass.unusedFunctionOne()
          MyClass.unusedFunctionTwo()
        }
      }
    }
    
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
      let unusedHack = IncludeUnusedHack()
      ...
    }
    

2 个答案:

答案 0 :(得分:2)

我也面临这样的问题,然后通过关闭选项解决了问题。

app(in TARGETS) > Build Settings > Linking > Dead Code Stripping

答案 1 :(得分:1)

我相信这是Xcode通过6.1 Beta 2的一个错误。看起来Xcode 6.1 Beta 3修复了它(今天发布,9月29日)。从发行说明:

  

<强>测试

     

•死代码剥离不再从Swift中删除公共声明   单元测试所需的应用目标。 (18173029)