applicationDidFinishLaunching

applicationDidFinishLaunching

我正在研究框架安装程序脚本。该脚本需要修改用户的AppDelegate文件,并在applicationDidFinishLaunching和applicationWillTerminatate方法的开头或结尾处插入几行代码。

我考虑过的一些选项:

  • 解析源代码,并在正确的位置插入行。 (很难正确地使用每个人的代码,几乎等于编写一个编译器...)
  • 子类化AppDelegate文件(可能吗?)
  • 类别?

  • 哪个是最佳选择?还有其他建议吗?

    最佳答案

    如果您确实需要做一些修改AppDelegate的操作,而无需开发人员的任何干预,并且可以修改xcodeproj和nib而不是源代码,那么有一种方法可以做到。

    首先,确保您的类已被编译,并且该类的实例已在笔尖中创建。

    现在,这是您的工作:

  • 定义一个-[AHHackClass applicationDidFinishLaunching]方法来完成您的额外工作,然后调用[self originalApplicationDidFinishLaunching]
  • -[AHHackClass awakeFromNib:]中,使用objc运行时调用将-[AHHackClass applicationDidFinishLaunching]方法作为-[originalApplicationDidFinishLaunching]复制到应用程序委托中,然后使用方法swizzling交换这两种方法的实现。
  • applicationWillTerminate进行同样的操作。

  • 请参见 JRSwizzle 中的一些使方法转换变得更容易的代码,以及 MethodSwizzling at CocoaDev中的某些背景。

    但是,执行此操作的方法可能更简单:是否确实需要从应用程序委托的applicationDidFinishLaunchingapplicationWillTerminate方法中调用您的多余内容?您不能只是设置为在awakeFromNib中监听通知并在那里处理事情吗?

    并且,由于某种原因,如果您不能执行此操作,是否可以仅在指令中向开发人员添加一行以从其applicationDidFinishLaunching方法调用您的方法?

    关于python - 以编程方式修改某人的AppDelegate-类别,子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14883568/

    10-14 20:38