Skip to content

Commit 5f09992

Browse files
authored
Extract SFHFKeychainUtils to dedicated Swift package (#24192)
* Add `import UIKit` to some files shared with notification extension All those Swift files compile without importing UIKit because `SFHFKeychainUtils.h` did that for them and they got access to it via the bridging header. Next, we'll move SFHFKeychainUtils into the modules, and UIKit will no longer be available through it. Side note: UIKit should not have been available via SFHFKeychainUtils in the first place. On top of that, SFHFKeychainUtils does not need UIKit either. * Extract SFHFKeychainUtils in a dedicated Swift package We need it in a dedicated package because the Objective-C implementation does not use ARC. Therefore, we need to use the `-fno-objc-arc` compiler setting. But such a setting should be applied sparingly so instead of blanket using it in an existing Objective-C package like WordPressSharedObjC, we use it surgically just for this file.
1 parent 04fe580 commit 5f09992

32 files changed

+42
-51
lines changed

Modules/Package.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ let package = Package(
1111
.library(name: "AsyncImageKit", targets: ["AsyncImageKit"]),
1212
.library(name: "DesignSystem", targets: ["DesignSystem"]),
1313
.library(name: "JetpackStatsWidgetsCore", targets: ["JetpackStatsWidgetsCore"]),
14+
.library(name: "SFHFKeychainUtils", targets: ["SFHFKeychainUtils"]),
1415
.library(name: "WordPressData", targets: ["WordPressData"]),
1516
.library(name: "WordPressFlux", targets: ["WordPressFlux"]),
1617
.library(name: "WordPressShared", targets: ["WordPressShared"]),
@@ -60,6 +61,12 @@ let package = Package(
6061
]),
6162
.target(name: "DesignSystem", swiftSettings: [.swiftLanguageMode(.v5)]),
6263
.target(name: "JetpackStatsWidgetsCore", swiftSettings: [.swiftLanguageMode(.v5)]),
64+
// SFHFKeychainUtils is an old Objective-C keychain wrapper.
65+
// The implementatoin predates ARC, hence the dedicated target with ARC disabled, for the time being.
66+
.target(
67+
name: "SFHFKeychainUtils",
68+
cSettings: [.unsafeFlags(["-fno-objc-arc"])]
69+
),
6370
.target(name: "UITestsFoundation", dependencies: [
6471
.product(name: "ScreenObject", package: "ScreenObject"),
6572
.product(name: "XCUITestHelpers", package: "ScreenObject"),
@@ -146,6 +153,7 @@ enum XcodeSupport {
146153
]
147154

148155
let shareAndDraftExtensionsDependencies: [Target.Dependency] = [
156+
"SFHFKeychainUtils",
149157
"WordPressShared",
150158
"WordPressUI",
151159
.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
@@ -168,6 +176,7 @@ enum XcodeSupport {
168176
.xcodeTarget("XcodeTarget_App", dependencies: [
169177
"DesignSystem",
170178
"JetpackStatsWidgetsCore",
179+
"SFHFKeychainUtils",
171180
"WordPressData",
172181
"WordPressFlux",
173182
"WordPressShared",
@@ -206,6 +215,7 @@ enum XcodeSupport {
206215
.product(name: "WordPressEditor", package: "AztecEditor-iOS"),
207216
]),
208217
.xcodeTarget("XcodeTarget_WordPressTests", dependencies: testDependencies + [
218+
"SFHFKeychainUtils",
209219
"WordPressShared",
210220
.product(name: "Gravatar", package: "Gravatar-SDK-iOS"),
211221
.product(name: "Nimble", package: "Nimble"),
@@ -216,10 +226,12 @@ enum XcodeSupport {
216226
.xcodeTarget("XcodeTarget_ShareExtension", dependencies: shareAndDraftExtensionsDependencies),
217227
.xcodeTarget("XcodeTarget_DraftActionExtension", dependencies: shareAndDraftExtensionsDependencies),
218228
.xcodeTarget("XcodeTarget_NotificationServiceExtension", dependencies: [
229+
"SFHFKeychainUtils",
219230
"WordPressShared",
220231
]),
221232
.xcodeTarget("XcodeTarget_StatsWidget", dependencies: [
222233
"JetpackStatsWidgetsCore",
234+
"SFHFKeychainUtils",
223235
"WordPressShared",
224236
"WordPressUI",
225237
.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),

WordPress/Classes/Utility/SFHFKeychainUtils.h renamed to Modules/Sources/SFHFKeychainUtils/include/SFHFKeychainUtils.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
// OTHER DEALINGS IN THE SOFTWARE.
2828
//
2929

30-
#import <UIKit/UIKit.h>
30+
#import <Foundation/Foundation.h>
3131

3232

3333
@interface SFHFKeychainUtils : NSObject {
@@ -68,4 +68,4 @@
6868
+ (NSArray<NSDictionary<NSString *, NSString *> *> *)getAllPasswordsForAccessGroup:(NSString *)accessGroup
6969
error:(NSError **)error;
7070

71-
@end
71+
@end

WordPress/Classes/Models/Blog/Blog.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
@import WordPressDataObjC;
55
#import "WPUserAgent.h"
66
#import "WordPress-Swift.h"
7+
@import SFHFKeychainUtils;
78

89
@import NSObject_SafeExpectations;
910
@import NSURL_IDN;

WordPress/Classes/Models/WPAccount.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@import SFHFKeychainUtils;
12
#import "WPAccount.h"
23
#import "WordPress-Swift.h"
34

WordPress/Classes/Services/CredentialsService.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import SFHFKeychainUtils
2+
13
protocol CredentialsProvider {
24
func getPassword(username: String, service: String) -> String?
35
}

WordPress/Classes/Services/NotificationSupportService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import SFHFKeychainUtils
23

34
@objc
45
open class NotificationSupportService: NSObject {

WordPress/Classes/Services/ShareExtensionService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import SFHFKeychainUtils
23

34
@objc
45
open class ShareExtensionService: NSObject {

WordPress/Classes/Stores/StatsWidgetsStore.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import JetpackStatsWidgetsCore
2+
import SFHFKeychainUtils
23
import WidgetKit
34

45
class StatsWidgetsStore {

WordPress/Classes/System/WordPress-Bridging-Header.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#import "SFHFKeychainUtils.h"
2-
31
// WordPress Module
42

53
#import "ActivityLogViewController.h"
@@ -55,7 +53,6 @@
5553
#import "SettingTableViewCell.h"
5654
#import "SettingsTextViewController.h"
5755
#import "SharingViewController.h"
58-
#import "SFHFKeychainUtils.h"
5956
#import "SiteSettingsViewController.h"
6057
#import "SourcePostAttribution.h"
6158
#import "StatsViewController.h"

0 commit comments

Comments
 (0)