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

+12
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 Modules/Sources/SFHFKeychainUtils/include/SFHFKeychainUtils.h

+2-2
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

+1
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

+1
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

+2
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

+1
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

+1
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

+1
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

-3
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"

WordPress/Classes/System/WordPressAppDelegate.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import SFHFKeychainUtils
12
import UIKit
23
import CocoaLumberjackSwift
34
import Reachability

WordPress/Classes/Utility/FormattableContent/Actions/FormattableContentActionCommand.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import UIKit
2+
13
/// Abstracts the logic behind contextual actions that can be applied to FormattableContent.
24
///
35
protocol FormattableContentActionCommand: CustomStringConvertible {

WordPress/Classes/Utility/FormattableContent/FormattableContentStyles.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import UIKit
12

23
/// Styles definition to be applied to a single FormattableContent entity.
34
public protocol FormattableContentStyles {

WordPress/Classes/Utility/KeychainUtils.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import SFHFKeychainUtils
2+
13
@objcMembers
24
class KeychainUtils: NSObject {
35

WordPress/Classes/Utility/Migrations/10-11/BlogToAccount.m

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
@import NSObject_SafeExpectations;
77
@import NSURL_IDN;
8+
@import SFHFKeychainUtils;
89

910
@implementation BlogToAccount {
1011
NSString *_defaultWpcomUsername;

WordPress/Classes/Utility/Migrations/10-11/BlogToJetpackAccount.m

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#import "WordPress-Swift.h"
44

55
@import NSObject_SafeExpectations;
6+
@import SFHFKeychainUtils;
67

78
static NSString * const BlogJetpackKeychainPrefix = @"jetpackblog-";
89

WordPress/Classes/Utility/Migrations/32-33/BlogToBlog32to33.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import SFHFKeychainUtils
12
import UIKit
23

34
class BlogToBlog32to33: NSEntityMigrationPolicy {

WordPress/Classes/ViewRelated/Aztec/Extensions/FormatBarItemProviders.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Foundation
22
import Gridicons
33
import Aztec
4+
import UIKit
45

56
protocol FormatBarItemProvider {
67
var iconImage: UIImage { get }

WordPress/Classes/ViewRelated/Aztec/Extensions/TextList+WordPress.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Foundation
22
import Aztec
3+
import UIKit
34

45
// MARK: - TextList.Style
56
//

WordPress/Classes/ViewRelated/NUX/Helpers/WordPressAuthenticationManager.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import SFHFKeychainUtils
23
import WordPressAuthenticator
34
import Gridicons
45
import UIKit

WordPress/Classes/ViewRelated/Notifications/FormattableContent/NotificationTextContent.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
21
import Foundation
2+
import UIKit
33

44
extension FormattableContentKind {
55
static let image = FormattableContentKind("image")

WordPress/JetpackStatsWidgets/Remote service/StatsWidgetsService.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import SFHFKeychainUtils
12
import WordPressKit
23
import JetpackStatsWidgetsCore
34
import WordPressShared
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
#import "SFHFKeychainUtils.h"
21
#import "Constants.h"

WordPress/Shared/SharePost.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import UIKit
23
import MobileCoreServices
34

45
/// A simple shared model to represent a Site

WordPress/WordPress.xcodeproj/project.pbxproj

-38
Original file line numberDiff line numberDiff line change
@@ -3297,9 +3297,6 @@
32973297
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
32983298
24CE68AE2CD3375300C7B37D /* Exceptions for "Classes" folder in "WordPress" target */ = {
32993299
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3300-
additionalCompilerFlagsByRelativePath = {
3301-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3302-
};
33033300
membershipExceptions = (
33043301
"Utility/Migrations/20-21/SafeReaderTopicToReaderTopic.m",
33053302
"ViewRelated/Me/All Domains/Coordinators/AllDomainsAddDomainCoordinator.swift",
@@ -3314,9 +3311,6 @@
33143311
};
33153312
24CE68AF2CD3375300C7B37D /* Exceptions for "Classes" folder in "WordPressShareExtension" target */ = {
33163313
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3317-
additionalCompilerFlagsByRelativePath = {
3318-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3319-
};
33203314
membershipExceptions = (
33213315
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
33223316
"Extensions/Colors and Styles/WPStyleGuide+Gridicon.swift",
@@ -3336,7 +3330,6 @@
33363330
Utility/BuildInformation/FeatureFlagRolloutStore.swift,
33373331
Utility/KeychainUtils.swift,
33383332
Utility/Logging/CocoaLumberjack.swift,
3339-
Utility/SFHFKeychainUtils.m,
33403333
ViewRelated/Aztec/Extensions/FormatBarItemProviders.swift,
33413334
"ViewRelated/Aztec/Extensions/Header+WordPress.swift",
33423335
"ViewRelated/Aztec/Extensions/TextList+WordPress.swift",
@@ -3350,9 +3343,6 @@
33503343
};
33513344
24CE68B02CD3375300C7B37D /* Exceptions for "Classes" folder in "WordPressDraftActionExtension" target */ = {
33523345
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3353-
additionalCompilerFlagsByRelativePath = {
3354-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3355-
};
33563346
membershipExceptions = (
33573347
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
33583348
"Extensions/Colors and Styles/WPStyleGuide+Gridicon.swift",
@@ -3372,7 +3362,6 @@
33723362
Utility/BuildInformation/FeatureFlagRolloutStore.swift,
33733363
Utility/KeychainUtils.swift,
33743364
Utility/Logging/CocoaLumberjack.swift,
3375-
Utility/SFHFKeychainUtils.m,
33763365
ViewRelated/Aztec/Extensions/FormatBarItemProviders.swift,
33773366
"ViewRelated/Aztec/Extensions/Header+WordPress.swift",
33783367
"ViewRelated/Aztec/Extensions/TextList+WordPress.swift",
@@ -3386,9 +3375,6 @@
33863375
};
33873376
24CE68B22CD3375300C7B37D /* Exceptions for "Classes" folder in "WordPressNotificationServiceExtension" target */ = {
33883377
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3389-
additionalCompilerFlagsByRelativePath = {
3390-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3391-
};
33923378
membershipExceptions = (
33933379
"Extensions/String+Helpers.swift",
33943380
"Extensions/UIImage+Extensions.swift",
@@ -3413,7 +3399,6 @@
34133399
Utility/FormattableContent/FormattableRangesFactory.swift,
34143400
Utility/FormattableContent/FormattableTextContent.swift,
34153401
Utility/KeychainUtils.swift,
3416-
Utility/SFHFKeychainUtils.m,
34173402
ViewRelated/Notifications/FormattableContent/FormattableCommentContent.swift,
34183403
ViewRelated/Notifications/FormattableContent/FormattableUserContent.swift,
34193404
ViewRelated/Notifications/FormattableContent/Notifiable.swift,
@@ -3443,9 +3428,6 @@
34433428
};
34443429
24CE68B52CD3375300C7B37D /* Exceptions for "Classes" folder in "Jetpack" target */ = {
34453430
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3446-
additionalCompilerFlagsByRelativePath = {
3447-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3448-
};
34493431
membershipExceptions = (
34503432
"Utility/App Configuration/AppConfiguration.swift",
34513433
"Utility/App Configuration/AppConstants.swift",
@@ -3457,9 +3439,6 @@
34573439
};
34583440
24CE68B62CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackShareExtension" target */ = {
34593441
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3460-
additionalCompilerFlagsByRelativePath = {
3461-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3462-
};
34633442
membershipExceptions = (
34643443
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
34653444
"Extensions/Colors and Styles/WPStyleGuide+Gridicon.swift",
@@ -3477,7 +3456,6 @@
34773456
Utility/BuildInformation/FeatureFlagRolloutStore.swift,
34783457
Utility/KeychainUtils.swift,
34793458
Utility/Logging/CocoaLumberjack.swift,
3480-
Utility/SFHFKeychainUtils.m,
34813459
ViewRelated/Aztec/Extensions/FormatBarItemProviders.swift,
34823460
"ViewRelated/Aztec/Extensions/Header+WordPress.swift",
34833461
"ViewRelated/Aztec/Extensions/TextList+WordPress.swift",
@@ -3491,9 +3469,6 @@
34913469
};
34923470
24CE68B72CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackDraftActionExtension" target */ = {
34933471
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3494-
additionalCompilerFlagsByRelativePath = {
3495-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3496-
};
34973472
membershipExceptions = (
34983473
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
34993474
"Extensions/Colors and Styles/WPStyleGuide+Gridicon.swift",
@@ -3511,7 +3486,6 @@
35113486
Utility/BuildInformation/FeatureFlagRolloutStore.swift,
35123487
Utility/KeychainUtils.swift,
35133488
Utility/Logging/CocoaLumberjack.swift,
3514-
Utility/SFHFKeychainUtils.m,
35153489
ViewRelated/Aztec/Extensions/FormatBarItemProviders.swift,
35163490
"ViewRelated/Aztec/Extensions/Header+WordPress.swift",
35173491
"ViewRelated/Aztec/Extensions/TextList+WordPress.swift",
@@ -3525,9 +3499,6 @@
35253499
};
35263500
24CE68B82CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackNotificationServiceExtension" target */ = {
35273501
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3528-
additionalCompilerFlagsByRelativePath = {
3529-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3530-
};
35313502
membershipExceptions = (
35323503
"Extensions/String+Helpers.swift",
35333504
"Extensions/UIImage+Extensions.swift",
@@ -3550,7 +3521,6 @@
35503521
Utility/FormattableContent/FormattableRangesFactory.swift,
35513522
Utility/FormattableContent/FormattableTextContent.swift,
35523523
Utility/KeychainUtils.swift,
3553-
Utility/SFHFKeychainUtils.m,
35543524
ViewRelated/Notifications/FormattableContent/FormattableCommentContent.swift,
35553525
ViewRelated/Notifications/FormattableContent/FormattableUserContent.swift,
35563526
ViewRelated/Notifications/FormattableContent/Notifiable.swift,
@@ -3565,9 +3535,6 @@
35653535
};
35663536
24CE68B92CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackStatsWidgets" target */ = {
35673537
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3568-
additionalCompilerFlagsByRelativePath = {
3569-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3570-
};
35713538
membershipExceptions = (
35723539
System/Constants/Constants.m,
35733540
"Utility/App Configuration/AppColor.swift",
@@ -3579,21 +3546,16 @@
35793546
Utility/BuildInformation/FeatureFlagRolloutStore.swift,
35803547
Utility/KeychainUtils.swift,
35813548
Utility/Logging/CocoaLumberjack.swift,
3582-
Utility/SFHFKeychainUtils.m,
35833549
"ViewRelated/Stats/Extensions/Double+Stats.swift",
35843550
"ViewRelated/Stats/Extensions/NumberFormatter+Stats.swift",
35853551
);
35863552
target = 0107E0B128F97D5000DE87DB /* JetpackStatsWidgets */;
35873553
};
35883554
24CE68BA2CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackIntents" target */ = {
35893555
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3590-
additionalCompilerFlagsByRelativePath = {
3591-
Utility/SFHFKeychainUtils.m = "-fno-objc-arc";
3592-
};
35933556
membershipExceptions = (
35943557
System/Constants/Constants.m,
35953558
Utility/Logging/CocoaLumberjack.swift,
3596-
Utility/SFHFKeychainUtils.m,
35973559
);
35983560
target = 0107E13828FE9DB200DE87DB /* JetpackIntents */;
35993561
};

WordPress/WordPressDraftActionExtension/WordPressDraftActionExtension-Bridging-Header.h

-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@
22
#import "Constants.h"
33

44
// Shared Helpers
5-
#import "SFHFKeychainUtils.h"
65
#import "TextBundleWrapper.h"

WordPress/WordPressNotificationServiceExtension/Sources/NotificationService.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import SFHFKeychainUtils
12
import UserNotifications
23

34
import WordPressKit
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,2 @@
11
// Main App Helpers
22
#import "Constants.h"
3-
4-
// Shared Helpers
5-
#import "SFHFKeychainUtils.h"

WordPress/WordPressShareExtension/UINavigationController+Extensions.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import UIKit
23

34
/// Encapsulates UINavigationController Helper Methods.
45
///

WordPress/WordPressShareExtension/WordPressShare-Bridging-Header.h

-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@
22
#import "Constants.h"
33

44
// Shared Helpers
5-
#import "SFHFKeychainUtils.h"
65
#import "TextBundleWrapper.h"

0 commit comments

Comments
 (0)