我正在研究框架安装程序脚本。该脚本需要修改用户的AppDelegate文件,并在applicationDidFinishLaunching和applicationWillTerminatate方法的开头或结尾处插入几行代码。
我考虑过的一些选项:
哪个是最佳选择?还有其他建议吗?
最佳答案
如果您确实需要做一些修改AppDelegate
的操作,而无需开发人员的任何干预,并且可以修改xcodeproj和nib而不是源代码,那么有一种方法可以做到。
首先,确保您的类已被编译,并且该类的实例已在笔尖中创建。
现在,这是您的工作:
-[AHHackClass applicationDidFinishLaunching]
方法来完成您的额外工作,然后调用[self originalApplicationDidFinishLaunching]
。 -[AHHackClass awakeFromNib:]
中,使用objc运行时调用将-[AHHackClass applicationDidFinishLaunching]
方法作为-[originalApplicationDidFinishLaunching]
复制到应用程序委托中,然后使用方法swizzling交换这两种方法的实现。 applicationWillTerminate
进行同样的操作。 请参见
JRSwizzle
中的一些使方法转换变得更容易的代码,以及 MethodSwizzling
at CocoaDev中的某些背景。但是,执行此操作的方法可能更简单:是否确实需要从应用程序委托的
applicationDidFinishLaunching
和applicationWillTerminate
方法中调用您的多余内容?您不能只是设置为在awakeFromNib
中监听通知并在那里处理事情吗?并且,由于某种原因,如果您不能执行此操作,是否可以仅在指令中向开发人员添加一行以从其
applicationDidFinishLaunching
方法调用您的方法?关于python - 以编程方式修改某人的AppDelegate-类别,子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14883568/