我已经导入框架从应用程序发送电子邮件在后台即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这样的蓝牙库,它可能不会在模拟器上编译,而只能在实际设备上运行。

当我遇到同样的问题时:

架构i386的未定义符号: _OBJC_CLASS_$_SKPSMTPMessage,引用自ConfirmController.o中的objc-class-ref

结果我忘记添加框架了。确切地说,是QuartzCore.framework。

是的,这和艾伦说的有关…在源文件的Utilities部分中查找TargetMembership。有一个复选框将该文件与项目关联起来。检查这个也为我解决了这个问题。

答案是你只需拖放文件夹在项目上,然后点击复制。

在IOS 6中也遇到了类似的问题。 能够通过在构建阶段部分的“链接二进制库”中添加storekit.framework来解决这个问题。

现在,它就像一个魔法。