Skip to content

Commit

Permalink
FEAT: Add sources
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakub Petrík committed Apr 18, 2018
1 parent 3c75e7e commit 301b153
Show file tree
Hide file tree
Showing 4 changed files with 223 additions and 10 deletions.
10 changes: 10 additions & 0 deletions PluggableApplicationDelegate.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,15 @@

/* Begin PBXBuildFile section */
3B0791942087363400A39104 /* PluggableApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B0791922087363400A39104 /* PluggableApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
3B07919B2087364400A39104 /* PluggableApplicationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B07919A2087364400A39104 /* PluggableApplicationDelegate.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
3B07918F2087363400A39104 /* PluggableApplicationDelegate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PluggableApplicationDelegate.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3B0791922087363400A39104 /* PluggableApplicationDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PluggableApplicationDelegate.h; sourceTree = "<group>"; };
3B0791932087363400A39104 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3B07919A2087364400A39104 /* PluggableApplicationDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluggableApplicationDelegate.swift; sourceTree = "<group>"; };
3B07919C208736AD00A39104 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -30,6 +33,7 @@
3B0791852087363400A39104 = {
isa = PBXGroup;
children = (
3B07919C208736AD00A39104 /* README.md */,
3B0791912087363400A39104 /* PluggableApplicationDelegate */,
3B0791902087363400A39104 /* Products */,
);
Expand All @@ -48,6 +52,7 @@
children = (
3B0791922087363400A39104 /* PluggableApplicationDelegate.h */,
3B0791932087363400A39104 /* Info.plist */,
3B07919A2087364400A39104 /* PluggableApplicationDelegate.swift */,
);
path = PluggableApplicationDelegate;
sourceTree = "<group>";
Expand Down Expand Up @@ -95,6 +100,7 @@
TargetAttributes = {
3B07918E2087363400A39104 = {
CreatedOnToolsVersion = 9.3;
LastSwiftMigration = 0930;
};
};
};
Expand Down Expand Up @@ -130,6 +136,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B07919B2087364400A39104 /* PluggableApplicationDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -259,6 +266,7 @@
3B0791982087363400A39104 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic;
DEFINES_MODULE = YES;
Expand All @@ -276,6 +284,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.inloopx.PluggableApplicationDelegate;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
Expand All @@ -284,6 +293,7 @@
3B0791992087363400A39104 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic;
DEFINES_MODULE = YES;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3B07918E2087363400A39104"
BuildableName = "PluggableApplicationDelegate.framework"
BlueprintName = "PluggableApplicationDelegate"
ReferencedContainer = "container:PluggableApplicationDelegate.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3B07918E2087363400A39104"
BuildableName = "PluggableApplicationDelegate.framework"
BlueprintName = "PluggableApplicationDelegate"
ReferencedContainer = "container:PluggableApplicationDelegate.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3B07918E2087363400A39104"
BuildableName = "PluggableApplicationDelegate.framework"
BlueprintName = "PluggableApplicationDelegate"
ReferencedContainer = "container:PluggableApplicationDelegate.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
10 changes: 0 additions & 10 deletions PluggableApplicationDelegate/PluggableApplicationDelegate.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
//
// PluggableApplicationDelegate.h
// PluggableApplicationDelegate
//
// Created by Jakub Petrík on 4/18/18.
// Copyright © 2018 INLOOPX. All rights reserved.
//

#import <UIKit/UIKit.h>

Expand All @@ -13,7 +7,3 @@ FOUNDATION_EXPORT double PluggableApplicationDelegateVersionNumber;

//! Project version string for PluggableApplicationDelegate.
FOUNDATION_EXPORT const unsigned char PluggableApplicationDelegateVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import <PluggableApplicationDelegate/PublicHeader.h>


133 changes: 133 additions & 0 deletions PluggableApplicationDelegate/PluggableApplicationDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
//
// PluggableApplicationDelegate.swift
//
// Created by Basem Emara on 2018-04-07.
// Copyright © 2018 Basem Emara. All rights reserved.
//

// NOTE: Maintained code in ZamzamKit framework:
// https://github.com/ZamzamInc/ZamzamKit/blob/master/Sources/Models/iOS/PluggableApplicationDelegate.swift

import UIKit

public protocol ApplicationService {
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

func applicationWillEnterForeground(_ application: UIApplication)
func applicationDidEnterBackground(_ application: UIApplication)
func applicationDidBecomeActive(_ application: UIApplication)
func applicationWillResignActive(_ application: UIApplication)

func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication)
func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication)

func applicationWillTerminate(_ application: UIApplication)
func applicationDidReceiveMemoryWarning(_ application: UIApplication)

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error)
}

// MARK: - Optionals

public extension ApplicationService {
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return true }
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return true }

func applicationWillEnterForeground(_ application: UIApplication) {}
func applicationDidEnterBackground(_ application: UIApplication) {}
func applicationDidBecomeActive(_ application: UIApplication) {}
func applicationWillResignActive(_ application: UIApplication) {}

func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication) {}
func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication) {}

func applicationWillTerminate(_ application: UIApplication) {}
func applicationDidReceiveMemoryWarning(_ application: UIApplication) {}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {}
}

open class PluggableApplicationDelegate: UIResponder, UIApplicationDelegate {

public var window: UIWindow?

/// Lazy implementation of application services list
public lazy var lazyServices: [ApplicationService] = {
services()
}()

/// List of application services for binding to `AppDelegate` events
open func services() -> [ApplicationService] {
return [ /* Populated from sub-class */ ]
}
}

public extension PluggableApplicationDelegate {

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
return lazyServices.reduce(true) {
$0 && $1.application(application, willFinishLaunchingWithOptions: launchOptions)
}
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return lazyServices.reduce(true) {
$0 && $1.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
}

public extension PluggableApplicationDelegate {

func applicationWillEnterForeground(_ application: UIApplication) {
lazyServices.forEach { $0.applicationWillEnterForeground(application) }
}

func applicationDidEnterBackground(_ application: UIApplication) {
lazyServices.forEach { $0.applicationDidEnterBackground(application) }
}

func applicationDidBecomeActive(_ application: UIApplication) {
lazyServices.forEach { $0.applicationDidBecomeActive(application) }
}

func applicationWillResignActive(_ application: UIApplication) {
lazyServices.forEach { $0.applicationWillResignActive(application) }
}
}

public extension PluggableApplicationDelegate {

func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication) {
lazyServices.forEach { $0.applicationProtectedDataWillBecomeUnavailable(application) }
}

func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication) {
lazyServices.forEach { $0.applicationProtectedDataDidBecomeAvailable(application) }
}
}

public extension PluggableApplicationDelegate {

func applicationWillTerminate(_ application: UIApplication) {
lazyServices.forEach { $0.applicationWillTerminate(application) }
}

func applicationDidReceiveMemoryWarning(_ application: UIApplication) {
lazyServices.forEach { $0.applicationDidReceiveMemoryWarning(application) }
}
}

public extension PluggableApplicationDelegate {

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
lazyServices.forEach { $0.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) }
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
lazyServices.forEach { $0.application(application, didFailToRegisterForRemoteNotificationsWithError: error) }
}
}

0 comments on commit 301b153

Please sign in to comment.