添加了Swift代码到J2EE-C项目。构建并为模拟器工作。存档未定义符号错误失败。
对编译文件的深入调查
- C“*.o”文件需要符号:
_OBJC_CLASS_$_AClass
字符串
但AClass.swift“AClass.o”文件只有(每纳米输出):
0000000000002318 D _OBJC_METACLASS_$_AClass
型
与模拟器编译相比,我看到AClass.swift编译成AClass.o:
0000000000002890 S _OBJC_CLASS_$_AClass
0000000000002398 D _OBJC_METACLASS_$_AClass
型
我不明白为什么存档不把“S OBJC_CLASS$_AClass”。
我已经做了什么:
- 清除/删除并重新启动所有可能的;
- 具有@objc属性的原因,
- 重新添加Swift文件到Xcode(首先,这些文件被放置在那里很奇怪-不是在组中,一个文件显示在几个地方。但完全删除并重新添加,以便编译到模拟器);
- 在构建配置中尝试了所有可能的拱门设置;
- 比较了构建日志,试图找到一些特殊的标志来防止这一点(没有特殊的,只是-DDEBUG=1之类的)。由于编译和链接使用了不同的“sdk”文件夹。一个用于模拟器,一个用于iPhone设备;
- 将所有ONLY_ACTIVE_VALVE设置为No。不起作用;
- “默认情况下隐藏的符号”设置为“否”。
最终如何建立档案?
2条答案
按热度按时间rbpvctlc1#
堆栈溢出类似的问题提示给了我一些更多的想法,其中一个工作)。.所有需要的只是增加iOS部署目标.从12.0到12.4在我的情况下工作.
Flutter Xcode 12 archive build fails with Undefined symbol: OBJC_CLASS$_STPAPIClient
de90aj5v2#
当然!这里有一个简明的清单:
1.如果需要,确保Swift类使用
@objc
注解。1.在正确的模块中检查Swift类成员。
1.验证Swift文件是否是归档目标的成员。
1.查看构建设置,尤其是Swift优化级别。
1.考虑在NSObject子类上使用
@objcMembers
。1.清理生成文件夹并重新生成。
1.确认匹配的部署目标。
1.检查归档构建的正确体系结构。
1.检查生成的Swift接口(
-Swift.h
文件)。1.将Xcode更新到最新版本。