Skip to content

Commit 301b153

Browse files
author
Jakub Petrík
committed
FEAT: Add sources
1 parent 3c75e7e commit 301b153

File tree

4 files changed

+223
-10
lines changed

4 files changed

+223
-10
lines changed

PluggableApplicationDelegate.xcodeproj/project.pbxproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88

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

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

1922
/* Begin PBXFrameworksBuildPhase section */
@@ -30,6 +33,7 @@
3033
3B0791852087363400A39104 = {
3134
isa = PBXGroup;
3235
children = (
36+
3B07919C208736AD00A39104 /* README.md */,
3337
3B0791912087363400A39104 /* PluggableApplicationDelegate */,
3438
3B0791902087363400A39104 /* Products */,
3539
);
@@ -48,6 +52,7 @@
4852
children = (
4953
3B0791922087363400A39104 /* PluggableApplicationDelegate.h */,
5054
3B0791932087363400A39104 /* Info.plist */,
55+
3B07919A2087364400A39104 /* PluggableApplicationDelegate.swift */,
5156
);
5257
path = PluggableApplicationDelegate;
5358
sourceTree = "<group>";
@@ -95,6 +100,7 @@
95100
TargetAttributes = {
96101
3B07918E2087363400A39104 = {
97102
CreatedOnToolsVersion = 9.3;
103+
LastSwiftMigration = 0930;
98104
};
99105
};
100106
};
@@ -130,6 +136,7 @@
130136
isa = PBXSourcesBuildPhase;
131137
buildActionMask = 2147483647;
132138
files = (
139+
3B07919B2087364400A39104 /* PluggableApplicationDelegate.swift in Sources */,
133140
);
134141
runOnlyForDeploymentPostprocessing = 0;
135142
};
@@ -259,6 +266,7 @@
259266
3B0791982087363400A39104 /* Debug */ = {
260267
isa = XCBuildConfiguration;
261268
buildSettings = {
269+
CLANG_ENABLE_MODULES = YES;
262270
CODE_SIGN_IDENTITY = "";
263271
CODE_SIGN_STYLE = Automatic;
264272
DEFINES_MODULE = YES;
@@ -276,6 +284,7 @@
276284
PRODUCT_BUNDLE_IDENTIFIER = com.inloopx.PluggableApplicationDelegate;
277285
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
278286
SKIP_INSTALL = YES;
287+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
279288
SWIFT_VERSION = 4.0;
280289
TARGETED_DEVICE_FAMILY = "1,2";
281290
};
@@ -284,6 +293,7 @@
284293
3B0791992087363400A39104 /* Release */ = {
285294
isa = XCBuildConfiguration;
286295
buildSettings = {
296+
CLANG_ENABLE_MODULES = YES;
287297
CODE_SIGN_IDENTITY = "";
288298
CODE_SIGN_STYLE = Automatic;
289299
DEFINES_MODULE = YES;
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "0930"
4+
version = "1.3">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES">
8+
<BuildActionEntries>
9+
<BuildActionEntry
10+
buildForTesting = "YES"
11+
buildForRunning = "YES"
12+
buildForProfiling = "YES"
13+
buildForArchiving = "YES"
14+
buildForAnalyzing = "YES">
15+
<BuildableReference
16+
BuildableIdentifier = "primary"
17+
BlueprintIdentifier = "3B07918E2087363400A39104"
18+
BuildableName = "PluggableApplicationDelegate.framework"
19+
BlueprintName = "PluggableApplicationDelegate"
20+
ReferencedContainer = "container:PluggableApplicationDelegate.xcodeproj">
21+
</BuildableReference>
22+
</BuildActionEntry>
23+
</BuildActionEntries>
24+
</BuildAction>
25+
<TestAction
26+
buildConfiguration = "Debug"
27+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
shouldUseLaunchSchemeArgsEnv = "YES">
30+
<Testables>
31+
</Testables>
32+
<AdditionalOptions>
33+
</AdditionalOptions>
34+
</TestAction>
35+
<LaunchAction
36+
buildConfiguration = "Debug"
37+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
38+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
39+
launchStyle = "0"
40+
useCustomWorkingDirectory = "NO"
41+
ignoresPersistentStateOnLaunch = "NO"
42+
debugDocumentVersioning = "YES"
43+
debugServiceExtension = "internal"
44+
allowLocationSimulation = "YES">
45+
<MacroExpansion>
46+
<BuildableReference
47+
BuildableIdentifier = "primary"
48+
BlueprintIdentifier = "3B07918E2087363400A39104"
49+
BuildableName = "PluggableApplicationDelegate.framework"
50+
BlueprintName = "PluggableApplicationDelegate"
51+
ReferencedContainer = "container:PluggableApplicationDelegate.xcodeproj">
52+
</BuildableReference>
53+
</MacroExpansion>
54+
<AdditionalOptions>
55+
</AdditionalOptions>
56+
</LaunchAction>
57+
<ProfileAction
58+
buildConfiguration = "Release"
59+
shouldUseLaunchSchemeArgsEnv = "YES"
60+
savedToolIdentifier = ""
61+
useCustomWorkingDirectory = "NO"
62+
debugDocumentVersioning = "YES">
63+
<MacroExpansion>
64+
<BuildableReference
65+
BuildableIdentifier = "primary"
66+
BlueprintIdentifier = "3B07918E2087363400A39104"
67+
BuildableName = "PluggableApplicationDelegate.framework"
68+
BlueprintName = "PluggableApplicationDelegate"
69+
ReferencedContainer = "container:PluggableApplicationDelegate.xcodeproj">
70+
</BuildableReference>
71+
</MacroExpansion>
72+
</ProfileAction>
73+
<AnalyzeAction
74+
buildConfiguration = "Debug">
75+
</AnalyzeAction>
76+
<ArchiveAction
77+
buildConfiguration = "Release"
78+
revealArchiveInOrganizer = "YES">
79+
</ArchiveAction>
80+
</Scheme>
Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
//
2-
// PluggableApplicationDelegate.h
3-
// PluggableApplicationDelegate
4-
//
5-
// Created by Jakub Petrík on 4/18/18.
61
// Copyright © 2018 INLOOPX. All rights reserved.
7-
//
82

93
#import <UIKit/UIKit.h>
104

@@ -13,7 +7,3 @@ FOUNDATION_EXPORT double PluggableApplicationDelegateVersionNumber;
137

148
//! Project version string for PluggableApplicationDelegate.
159
FOUNDATION_EXPORT const unsigned char PluggableApplicationDelegateVersionString[];
16-
17-
// In this header, you should import all the public headers of your framework using statements like #import <PluggableApplicationDelegate/PublicHeader.h>
18-
19-
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
//
2+
// PluggableApplicationDelegate.swift
3+
//
4+
// Created by Basem Emara on 2018-04-07.
5+
// Copyright © 2018 Basem Emara. All rights reserved.
6+
//
7+
8+
// NOTE: Maintained code in ZamzamKit framework:
9+
// https://github.com/ZamzamInc/ZamzamKit/blob/master/Sources/Models/iOS/PluggableApplicationDelegate.swift
10+
11+
import UIKit
12+
13+
public protocol ApplicationService {
14+
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
15+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
16+
17+
func applicationWillEnterForeground(_ application: UIApplication)
18+
func applicationDidEnterBackground(_ application: UIApplication)
19+
func applicationDidBecomeActive(_ application: UIApplication)
20+
func applicationWillResignActive(_ application: UIApplication)
21+
22+
func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication)
23+
func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication)
24+
25+
func applicationWillTerminate(_ application: UIApplication)
26+
func applicationDidReceiveMemoryWarning(_ application: UIApplication)
27+
28+
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
29+
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error)
30+
}
31+
32+
// MARK: - Optionals
33+
34+
public extension ApplicationService {
35+
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return true }
36+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return true }
37+
38+
func applicationWillEnterForeground(_ application: UIApplication) {}
39+
func applicationDidEnterBackground(_ application: UIApplication) {}
40+
func applicationDidBecomeActive(_ application: UIApplication) {}
41+
func applicationWillResignActive(_ application: UIApplication) {}
42+
43+
func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication) {}
44+
func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication) {}
45+
46+
func applicationWillTerminate(_ application: UIApplication) {}
47+
func applicationDidReceiveMemoryWarning(_ application: UIApplication) {}
48+
49+
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
50+
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {}
51+
}
52+
53+
open class PluggableApplicationDelegate: UIResponder, UIApplicationDelegate {
54+
55+
public var window: UIWindow?
56+
57+
/// Lazy implementation of application services list
58+
public lazy var lazyServices: [ApplicationService] = {
59+
services()
60+
}()
61+
62+
/// List of application services for binding to `AppDelegate` events
63+
open func services() -> [ApplicationService] {
64+
return [ /* Populated from sub-class */ ]
65+
}
66+
}
67+
68+
public extension PluggableApplicationDelegate {
69+
70+
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
71+
return lazyServices.reduce(true) {
72+
$0 && $1.application(application, willFinishLaunchingWithOptions: launchOptions)
73+
}
74+
}
75+
76+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
77+
return lazyServices.reduce(true) {
78+
$0 && $1.application(application, didFinishLaunchingWithOptions: launchOptions)
79+
}
80+
}
81+
}
82+
83+
public extension PluggableApplicationDelegate {
84+
85+
func applicationWillEnterForeground(_ application: UIApplication) {
86+
lazyServices.forEach { $0.applicationWillEnterForeground(application) }
87+
}
88+
89+
func applicationDidEnterBackground(_ application: UIApplication) {
90+
lazyServices.forEach { $0.applicationDidEnterBackground(application) }
91+
}
92+
93+
func applicationDidBecomeActive(_ application: UIApplication) {
94+
lazyServices.forEach { $0.applicationDidBecomeActive(application) }
95+
}
96+
97+
func applicationWillResignActive(_ application: UIApplication) {
98+
lazyServices.forEach { $0.applicationWillResignActive(application) }
99+
}
100+
}
101+
102+
public extension PluggableApplicationDelegate {
103+
104+
func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication) {
105+
lazyServices.forEach { $0.applicationProtectedDataWillBecomeUnavailable(application) }
106+
}
107+
108+
func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication) {
109+
lazyServices.forEach { $0.applicationProtectedDataDidBecomeAvailable(application) }
110+
}
111+
}
112+
113+
public extension PluggableApplicationDelegate {
114+
115+
func applicationWillTerminate(_ application: UIApplication) {
116+
lazyServices.forEach { $0.applicationWillTerminate(application) }
117+
}
118+
119+
func applicationDidReceiveMemoryWarning(_ application: UIApplication) {
120+
lazyServices.forEach { $0.applicationDidReceiveMemoryWarning(application) }
121+
}
122+
}
123+
124+
public extension PluggableApplicationDelegate {
125+
126+
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
127+
lazyServices.forEach { $0.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) }
128+
}
129+
130+
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
131+
lazyServices.forEach { $0.application(application, didFailToRegisterForRemoteNotificationsWithError: error) }
132+
}
133+
}

0 commit comments

Comments
 (0)