SOXAppDelegate 1.1.1

SOXAppDelegate 1.1.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新发布2015年4月

Florian Krüger 维护。



这是一个基于 Nico Hämäläinen 优秀的 SOAppDelegate 灵感的 cocoapod。在我将 SOAppDelegate 用于一些我的项目后,我很快发现我不想要再使用 Vanilla AppDelegates 了。这个 pod 应该能简化新 iOS 项目的设置。

用法

要运行示例项目;克隆仓库,然后首先从 Example 目录运行 pod install

有关此主题的详细介绍,请参阅这篇博客文章

步骤 1

将您的 UIAppDelegate 实现改为 SOXAppDelegate 的子类。

#import "SOXAppDelegate.h"

@interface SOXDAppDelegate : SOXAppDelegate

@end

步骤 2

创建您的服务类。您可以为此目的使用普通的 NSObject 子类或 SOXService 子类。
NSObject 子类应该至少实现某种 Singleton 模式以防止你的服务的多个实例(每种 App 只有一个 UIApplicationDelegate,所以你的服务也应该是这样的)。
SOXService 实现了默认的 Singleton 模式,共享实例通过 sharedInstance 可用。

步骤 3

services 方法添加到您的 SOXAppDelegate 子类中。在这个示例中,我们假设 MyServiceClass 是您的服务的名称

#pragma mark - Services

- (NSArray *)services
{
    static NSArray * _services;
    static dispatch_once_t _onceTokenServices;
    dispatch_once(&_onceTokenServices, ^{
        _services = @[[MyServiceClass sharedInstance]];
    });
    return _services;
}

步骤 4

在服务类中实现您所需的所有 UIAppDelegate 方法。您不需要声明 UIApplicationDelegate。当在 AppDelegate 上调用实现的方法时,您的 SOXAppDelegate 子类会调用服务实现的所有方法。

步骤 5

不要忘记在您委托内的所有 UIApplicationDelegate 方法中调用 super。基类将确保实现该方法的 所有服务收到通知。

后台模式

默认情况下,SOXAppDelegate 没有实现以下方法

  • - application:didReceiveRemoteNotification:fetchCompletionHandler
  • - application:performFetchWithCompletionHandler

使用这些方法时,您需要在Info.plist中额外进行设置。为了防止您在运行应用程序时(请参阅问题#2)在控制台上看到警告或提交应用程序后iTunes向您发送电子邮件(请参阅问题#3),现在通过定义已经排除了这些方法。

要使用这些方法,请使用以下定义中的任何一个(或两个都使用)

  • SOXAPPDELEGATE_BACKGROUNDMODE_FETCH
  • SOXAPPDELEGATE_BACKGROUNDMODE_REMOTENOTIFICATION(用于- application:didReceiveRemoteNotification:fetchCompletionHandler:

启用后台模式

要启用其中一个后台模式,请使用cocoapods的post install hook

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
    target.build_configurations.each do |config|
      # enable UIBackgroundMode 'fetch'
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'SOXAPPDELEGATE_BACKGROUNDMODE_FETCH=1']

      # enable UIBackgroundMode 'remote-notification'
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'SOXAPPDELEGATE_BACKGROUNDMODE_REMOTENOTIFICATION=1']

      # enable both
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'SOXAPPDELEGATE_BACKGROUNDMODE_FETCH=1', 'SOXAPPDELEGATE_BACKGROUNDMODE_REMOTENOTIFICATION=1']
    end
  end
end

之后记得运行pod install以触发post install hook。

感谢johndpope通过它的回答展示了如何在cocoapods中添加GCC编译预处理定义。

需求

  • iOS >= 6.0

安装

作者

Florian Krüger, [email protected]

许可证

SOXAppDelegate遵守MIT许可证。有关更多信息,请参阅LICENSE文件。