我正在研究框架安装程序脚本。该脚本需要修改用户AppDelegate文件,并在applicationDidFinishLaunching和applicationWillTerminatate方法的开头或结尾注入几行代码。
我想过的一些选项:
哪一个是最好的选择?还有其他建议吗?
答案 0 :(得分:1)
如果你确实需要在没有开发人员干预的情况下修改AppDelegate
,你可以修改xcodeproj和nib而不是源代码,有一种方法可以做到。
首先,确保编译您的类,并在nib中创建类的实例。
现在,这就是你做的事情:
-[AHHackClass applicationDidFinishLaunching]
方法,然后调用[self originalApplicationDidFinishLaunching]
。-[AHHackClass awakeFromNib:]
中,使用objc运行时调用将-[AHHackClass applicationDidFinishLaunching]
方法复制到应用程序委托为-[originalApplicationDidFinishLaunching]
,然后使用方法调配来交换这两种方法的实现。applicationWillTerminate
。请参阅JRSwizzle
了解一些让方法更容易调整的代码,以及MethodSwizzling
at CocoaDev的某些背景知识。
但是,可能有一种更简单的方法:您是否真的需要从应用委托的applicationDidFinishLaunching
和applicationWillTerminate
方法调用额外的内容?您是否可以设置为在awakeFromNib
中收听通知并处理其中的内容?
如果由于某种原因,您不能这样做,您是否可以在开发人员的说明中插入一行来从他们的applicationDidFinishLaunching
方法调用您的方法?
答案 1 :(得分:0)
我目前正在考虑的一个解决方案:
这看起来非常简单和强大。对此的想法?这适用于所有/大多数项目吗?