在项目中使用MailCore

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmyhy/article/details/8233427

要想成功编译MailCore框架不是一件容易的事情。当你从 https://github.com/mronge/MailCore.git下载MailCore,并打开MailCore.xcodeproj,总是会在编译时遇到各种错误。如果你想简单一点,那么可以使用Google的reMail。reMail使用了MailCore框架,它已经实现了一个可以在iPhone客户端快速查找指定邮件的Mail程序。经过简单修改,你可以把reMail使用在你的项目中。甚至你可以直接使用reMail中附带的MailCore框架——请参考另一篇文章《从reMail中获取MailCore框架》。

但是,reMail中的MailCore已经过时了——它并不是最新的MailCore源代码。如果你要更新至MailCore1.0以后版本,那么你必须直接从github获得MailCore的最新版本。

这个工作并不简单,你需要参考一系列复杂步骤,正如本文所述。

一、下载MailCore最新版本

执行下列脚本,你可以在本地硬盘是获得一份MailCore的最新代码:

git clone https://github.com/mronge/MailCore.git

cd MailCore/

git submodule update --init

 

二、把MailCore加入到项目

从Finder中将下载到的MailCore.xcodeproj拖到你的Xcode项目中。这会将MailCore.xcodeproj作为子项目添加到你的项目中。在Xcode的ProjectNaviagtor窗口,可以看到如下图所示的项目结构:

这些项目存在相互依赖的关系。其中,TestApp依赖于MailCore.xcodeproj项目(的libmailcore.a),MailCore.xcodeproj依赖于libetpan.xcdoeproj(的libeptan_mac.a),libetpan.xcodeproj依赖于Cyrus SASL.xcodeproj(的libsasl2.a),Cyrus SASL.xcodeproj依赖于openssl.xcodeproj(的libssl.a和libcrypto.a)。

首先,我们来编译libetpan。

从Scheme中选择static libetpan iOS->iPhone Simulator5.1,编译,OK。

接下来编译MailCore。

从Scheme中选择MailCore iOS --> iPhone Simulator5.1,编译,出现编译错误:

错误很多,主要是CTCoreFolder.m和CTCoreMessage.m中的方法前置声明的问题。

首先打开CTCoreFolder.h,增加如下方法声明:

- (const char*)getUTF7String:(char *)buffer fromString:(NSString *)str;

再打开CTCoreMessage.h,增加如下方法声明:
- (void)_buildUpBodyText:(CTMIME*)mime result:(NSMutableString *)result;

- (void)_buildUpHtmlBodyText:(CTMIME *)mime result:(NSMutableString*)result;

- (NSSet*)_addressListFromMailboxList:(struct mailimf_mailbox_list *)mailboxList;

- (structmailimf_mailbox_list*)_mailboxListFromAddressList:(NSSet*)addresses;

- (CTCoreAddress*)_addressFromMailbox:(struct mailimf_mailbox *)mailbox;

- (struct mailimf_address_list*)_IMFAddressListFromAddresssList:(NSSet*)addresses;

- (NSArray *)_stringArrayFromClist:(clist *)list ;

- (clist *)_clistFromStringArray:(NSArray *)strings ;

- (NSSet*)_addressListFromIMFAddressList:(struct mailimf_address_list *)imfList;

- (void)_releaseMailimfSingleFields:(struct mailimf_single_fields*)fields ;

再次编译,OK。

打开TestApp的Target“TestApp”,在Build Phases的Target Dependencies中增加项目依赖MaiCoreiOS。

在Link Binary With Libraries中增加如下框架和库:

libmailcore.a    libssl.a    libsasl2.a    libcrypto.a    libiconv.dylib    CFNetwork.framework

切换到Build Settings,在Header Search Paths中增加两个路径:
../../mailcore/libetpan/build-mac/include

../../mailcore/Source

分别是MailCore和Libetpan的头文件搜索路径。这个路径是相对于项目目录而言的,请根据你的实际情况进行修改。

现在,可以在你的项目中import "CTCoreAccount.h"了。



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页