我正在尝试为Cordova应用构建插件。在此插件中,我有一些用于推送通知的本机代码。我已经在插件中添加了所需的文件,现在我正尝试从应用程序的AppDelegate.m调用标头。但是导入时出现错误“找不到文件”。我在插件的plugin.xml中添加了头文件,如下所示:<头文件src =“ src / ios / xxxxx / xxxxx.h” /> 有什么想法吗?
答案 0 :(得分:1)
AppDelegate.m
是在Cordova创建iOS平台项目时自动生成的,因此不建议直接对其进行修改,因为如果使用cordova plugin rm ios && cordova platform add ios
重建平台项目,则所有更改都将丢失。 >
插件可以通过使用AppDelegate
类的类别扩展名来解决此问题,该类扩展名使您可以捆绑在您的插件存储库中扩展AppDelegate的代码,而不会影响自动生成的文件。
例如,您将创建myplugin/src/ios/AppDelegate+MyPlugin.h
:
#import "AppDelegate.h"
@interface AppDelegate (MyPlugin) <UIApplicationDelegate>
@end
然后在myplugin/src/ios/AppDelegate+MyPlugin.m
中,您可以实现您的应用程序委托,例如:
#import "AppDelegate+MyPlugin.h"
@implementation AppDelegate (MyPlugin)
// A UIApplication delegate
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"Remote notification received");
}
...
要允许您的AppDelegate类别与Cordova插件类进行交互,您可以公开一个公共方法,该方法返回其单例实例,AppDelegate类别可以调用该实例。例如:
myplugin/src/ios/MyPlugin.h
:
#import <Cordova/CDV.h>
@interface MyPlugin : CDVPlugin
// Public static method
+ (MyPlugin*) myPlugin;
// A public instance method
- (void)logMessage: (NSString*)msg;
@end
myplugin/src/ios/MyPlugin.m
:
#import "MyPlugin.h"
@implementation MyPlugin
// Private static reference
static MyPlugin* myplugin;
// Public static method
+ (MyPlugin*) myplugin {
return myplugin;
}
// implement CDVPlugin delegate
- (void)pluginInitialize {
myplugin = self;
}
// A public instance method
- (void)logMessage: (NSString*)msg
{
NSLog(@"MyPlugin: %@", msg);
}
@end
然后在myplugin/src/ios/AppDelegate+MyPlugin.m
中,您可以使用插件方法:
#import "AppDelegate+MyPlugin.h"
#import "MyPlugin.h"
@implementation AppDelegate (MyPlugin)
// A UIApplication delegate
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[MyPlugin.myPlugin logMessage:@"Remote notification received"];
}
...
采用这种方法的插件示例为cordova-plugin-firebasex。