Mic*_*ala 8 xcode unit-testing ios cocoapods swift
我的iOS应用有多个扩展程序:
今天延期
siri扩展
imessage扩展
我还创建了共享公共代码的框架.我的问题是我想要一个单元测试目标,它将测试所有扩展.我的Podfile看起来像这样:
target 'MyApp' do
pod 'MyFramework', :path => './MyFramework'
target 'MyAppTests' do
inherit! :search_paths
end
end
abstract_target 'Extensions' do
pod 'MyFramework', :path => './MyFramework'
target 'TodayExtension'
target 'SiriExtension'
target 'iMessageExtension'
target 'ExtensionsTests'
end
Run Code Online (Sandbox Code Playgroud)
如您所见,我创建了ExtensionsTests目标,但我不知道如何继承所有扩展的搜索路径.我也尝试使用
@testable import TodayExtension但是我得到了架构x86_64的未定义符号的链接错误.
我有什么想法可以解决这个问题?
完整的错误代码:
Undefined symbols for architecture x86_64:
"type metadata accessor for TodayExtension.LoadingView", referenced from:
ExtensionTests.LoadingViewTests.setUp () -> () in LoadingViewTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
编辑:
我认为这个问题很普遍:我如何测试任何扩展代码?我创建了单个视图项目,今天添加了扩展,我无法扩展代码.
在apple docs中只有这些信息:
要使用Xcode测试框架(即XCTest API)测试应用程序扩展,请编写使用包含应用程序作为主机环境来执行扩展代码的测试.要了解有关测试的更多信息,请参阅使用Xcode进行测试
这不是很有帮助
x86_64 体系结构的未定义符号
该错误告诉您TodayExtension无法找到(或部分) 的architecture x86_64. 架构 x86_64 是您的模拟器架构。
我怀疑您将TodayExtension目标设置为真实设备(架构arm x)并将TodayExtension构建设置Build Active Architecture Only设置为YES,这意味着它是为您的目标设备架构(arm x)而不是模拟器(x86_64)构建的。
使固定
在TodayExtension构建设置中(及其所有依赖项,如果有的话):
设置Build Active Architecture OnlyNO
设置Valid Architectures为arm64, armv7, armv7s, i386, x86_64(如果尚未设置
重建TodayExtension
如果问题仍然存在,请仔细检查工件切片。在终端中:
file /path/to/TodayExtension.apex/TodayExtension
Run Code Online (Sandbox Code Playgroud)
它应该输出:
/path/to/TodayExtension.appex/TodayExtension: Mach-O 64-bit executable x86_64
Run Code Online (Sandbox Code Playgroud)
对于你的框架:
file /path/to/MyFramework.framework/MyFramework
Run Code Online (Sandbox Code Playgroud)
应该输出:
path/to//MyFramework.framework/MyFramework: Mach-O universal binary with 5 architectures
path/to//MyFramework.framework/MyFramework (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
path/to//MyFramework.framework/MyFramework (for architecture i386): Mach-O dynamically linked shared library i386
path/to//MyFramework.framework/MyFramework (for architecture armv7): Mach-O dynamically linked shared library arm
path/to//MyFramework.framework/MyFramework (for architecture armv7s): Mach-O dynamically linked shared library arm
path/to//MyFramework.framework/MyFramework (for architecture arm64): Mach-O 64-bit dynamically linked shared library
Run Code Online (Sandbox Code Playgroud)