【问题标题】:Customizing iOS's application:didFinishLaunchingWithOptions: method in a Cordova/Ionic project自定义 iOS 的应用程序:didFinishLaunchingWithOptions: Cordova/Ionic 项目中的方法
【发布时间】:2015-09-09 02:39:42
【问题描述】:

我是 Cordova 的新手,想知道是否有一种方法可以调整 Cordova/Ionic 生成的平台代码而不妨碍开发过程。

具体要求是将 Facebook SDK 集成到 iOS 应用中,以支持 Facebook 移动应用安装广告。集成很简单:只需要​​添加一行代码 application:didFinishLaunchingWithOptions: 在 AppDelegate.m 中并将 Facebook iOS 框架添加到 Xcode 项目中。

目前整个平台目录被排除在源代码控制之外,因为它是由 Cordova 在构建期间生成的。如果我要调整 AppDelegate.m,我必须将它添加到源代码管理中。那么Ionic应用程序的后续更改不会导致与Xcode项目的合并冲突吗?如何在不中断流程的情况下将我的小改动集成到 Xcode 项目中?

注意:我确实寻找了一个插件作为解决方案,但我找到的插件来自with complications of its own。而且看来 Cordova 无论如何都没有在 application:didFinishLaunchingWithOptions: 中提供挂钩。

【问题讨论】:

    标签: ios cordova ionic-framework


    【解决方案1】:

    您应该创建自己的插件,而不是对 AppDelegate.m 进行更改

    您可以在pluginInitialize 上收听UIApplicationDidFinishLaunchingNotification 并将代码放在那里

    - (void)pluginInitialize
    {
    
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finishLaunching:) name:UIApplicationDidFinishLaunchingNotification object:nil];
    
    }
    
    - (void)finishLaunching:(NSNotification *)notification
    {
        // Put here the code that should be on the AppDelegate.m
    }
    

    plugin.xml 需要 onload true 才能调用 pluginInitialize

    <feature name="yourPluginName">
        <param name="ios-package" value="yourPluginClass" />
        <param name="onload" value="true" />
    </feature>
    

    【讨论】:

    • 谢谢,我验证了它,它有效!事实上,将代码放在pluginInitialize 中可能同样好,因为在 Ionic/Cordova 应用程序中,它确实最终会从 application:didFinishLaunchingWithOptions: 调用(通过该方法触发后的 Cordova 视图控制器的加载方法将其初始化为根视图控制器并调用 makeKeyAndVisible)
    • 是的,将代码放在 pluginInitialize 中就足够了,仅当应用程序启动时才需要使用观察者,例如,当应用程序关闭时从推送通知中获取从插件推送通知信息,或其他一些情况,其中 application:didFinishLaunchingWithOptions: 收到一些信息并且您想要该信息
    • 仅在使用onload=true 时出现错误,知道吗? 'NSInvalidArgumentException', reason: '-[SharingReceptor handleApplicationDidFinishLaunching]: unrecognized selector sent to instance 0x7fb63bc016d0'
    • jcesarmobile 我认为这是因为我需要在选择器名称后添加:(但不知道为什么,我不是 iOS 开发人员,这是我第一次尝试使用 cordova 插件...) .如果我也想接收启动事件,似乎需要 onload=true。
    • 是的,对不起,你必须把 : 放在选择器上,因为 finishLaunching 期待通知对象,如果你不在 finishLaunching 方法上使用通知对象,你可以改变它到- (void)finishLaunching{} 并且不应该得到错误
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      您可以添加应用程序委托文件,与 www 文件夹中的文件不同,该更改不会消失。您可以在 Xcode 项目文件夹中进行更改。

      【讨论】:

      • 谢谢!但是 xcodeproj 文件呢?我也必须更改它以添加 Facebook 框架。我认为如果进行了配置更改,Cordova 也会更改此文件。当然,这不应该经常发生。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      相关资源
      最近更新 更多