objective-c – 如何创建Apple邮件插件

objective-c – 如何创建Apple邮件插件,第1张

概述我将为OS X Mail.app应用程序创建一个邮件插件,以获得一些其他功能。 我不知道从哪里开始,因为没有官方的插件文档。 任何人都可以帮助我,我如何启动项目。 有没有任何初步的链接或教程,请建议? 如上所述,编写Apple Mail插件并不简单,因为它只有一个私有的插件API,这完全是无文档的,可以随着任何新版本的Mail.app而改变。最好的代码示例是 GPGMail,它是开源和仍然活跃(已 我将为OS X Mail.app应用程序创建一个邮件插件,以获得一些其他功能。

我不知道从哪里开始,因为没有官方的插件文档。

任何人都可以帮助我,我如何启动项目。
有没有任何初步的链接或教程,请建议?

@H_419_15@解决方法 如上所述,编写Apple Mail插件并不简单,因为它只有一个私有的插件API,这完全是无文档的,可以随着任何新版本的Mail.app而改变。最好的代码示例是 GPGMail,它是开源和仍然活跃(已经 working on Yosemite support)。这是我成功开始的(将会在github上完成):

如何构建最小的Apple Mail插件(从小牛和Xcode 6.0.1开始)

>您需要在XCode中创建一个OSX“Bundle”项目
>包装扩展名是mailbundle(在包装中的项目中构建设置)
>一个bundle需要存储在〜/ library / Mail / Bundles(作为构建阶段添加一个复制文件 *** 作,作为绝对路径目的地,* .mailbundle从您的构建/文件夹作为要复制的项目)
>为了开发,我已经在我的运行方案中设置了/Applications/Mail.app作为可执行文件,因此XCode中的运行将构建它,复制捆绑包并启动邮件;请注意,在这一点上,您将收到邮件中的错误,您的插件无法启动并被禁用
>您需要在Info.pList中提供SupportedpluginCompatibilityUUID的列表,I stole it from GPGMail,这些change with new Mail/OSX versions
>使用class-dump从Mail.app的私有API生成头文件
>起点是MVMailBundle,你必须继承,并有一个registerBundle方法来挂钩你

>我从一个小的MVMailBundle.h标题中的巨大的生成的头文件中提取出来,以包含需要的内容(由Gpgmail完成)

>创建一个新类MyMailBundle,继承自NSObject

>它需要一个初始化方法
>并将其设置为Info.pList中的“原则类”,以便在捆绑包由Mail.app加载时运行

#import <Cocoa/Cocoa.h>@interface MyMailBundle : NSObject+ (voID)initialize;@end

>初始化实现:以前,您可以使用简单的方式和directly inherit作为done in Letterbox,但是,since 64-bit runtimes of Objective-C您必须使用dynamic way as done by GPGMail:

>使用NSClassFromString动态获取MVMailBundle类
>和class_setSuperclass从< objc / runtime.h>让自己的类继承自己的类
>然后调用registerBundle就像MVMailBundle一样(需要包含MVMailBundle.h)

#import <objc/runtime.h>#import "MVMailBundle.h"#import "MyMailBundle.h"@implementation MyMailBundle+ (voID)initialize{    NSLog(@"Loading MyMail plugin...");    // since 64-bit objective-c runtimes,you apparently can't load    // symbols directly (i.e. through class inheritance) and have to    // resort to NSClassFromString    Class mvMailBundleClass = NSClassFromString(@"MVMailBundle");    // If this class is not available that means Mail.app    // doesn't allow plugins anymore or has changed the API    if (!mvMailBundleClass)        return;    // dynamically change super class hIErarchy#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wdeprecated"    class_setSuperclass([self class],mvMailBundleClass);#pragma GCC diagnostic pop    // register our plugin bundle in mail    [[((MyMailBundle *)self) class] registerBundle];    NSLog(@"Done registering MyMail plugin.");}@end

>添加一些NSLog日志记录调用来验证正确的事情,在XCode的控制台中运行/调试Mail.app时,或者在Console.app的系统日志中可以看到它们。
>这应该成功地运行插件在邮件没有错误!
>接下来的步骤涉及疯狂的事情,如MethodSwizzling和ClassPosing修改邮件的行为,Gpgmail可以是一个helpful example.(还没有在那里)

作为参考,这里有一些帮助我的资源:

> GPGMail
> Adam Nash: Getting Ready to Write an Apple Mail.app Plug-in for Mac OS X – 一些很好的链接,但显然他从来没有完成这个项目,所以没有代码
> James R. Eagan: Demystifying Mail.app Plugins on Leopard – 使用PyObjC在Python中编写一个插件,解释了基本的机制,非常有用
> Aaron Harnly: Mail Plugin Template – 对于XCode 2我认为,不幸的是,模板(下载zip)不再作为Xcode中的模板,但代码仍然有用,看看
> Aaron Harnly: Letterbox sources – 从同一个家伙,也从2007年,非常过时;包含一个readme from the template,虽然如果您不能使用该模板,它不是真的有帮助。

总结

以上是内存溢出为你收集整理的objective-c – 如何创建Apple邮件插件全部内容,希望文章能够帮你解决objective-c – 如何创建Apple邮件插件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1036792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存