我已经导入框架从应用程序发送电子邮件在后台即SKPSMTPMessage框架。有人能建议为什么下面的错误显示

Undefined symbols for architecture i386:

"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
  objc-class-ref in ConfirmController.o

"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartMessageKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartContentTypeKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

框架的来源:-

锁定MFMailComposeViewController中的字段

更新:

答:只需将文件夹拖放到项目上,然后单击复制。 这就是选择项目复选框和目标复选框。


当前回答

有可能您使用的库仅为REAL硬件编译。例如,如果您正在使用像Zephyr HxM Smart这样的蓝牙库,它可能不会在模拟器上编译,而只能在实际设备上运行。

其他回答

尝试删除框架,清理项目,将其添加回来并编译。 或 删除已被xcode在编译源代码中添加的类,清理项目,然后将其添加回build。

当我遇到同样的问题时,我忘记添加“编译版本的库(扩展名为.a)”。通常我们会在Build Phases的Target Dependency中添加导入项目的库,但是我们忘记在Link Binary with Libraries in Build Phases中添加“compiled library”。

对我来说,问题在于缺少框架。一旦我加入em,它就起作用了。

当我打开同一个项目两次时,我就遇到了这个问题,只有一个项目是原始的,另一个是从git url克隆的。

“产品”>“清洁”解决了这个问题。

如果你在xcode中导入其他项目,如果当前项目和导入项目在编译器源中都有相同的文件,那么只需在“构建阶段”设置中删除当前项目中的相同文件。这对我很管用。