Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Demo for WordPressShared resolution failure due to SwiftLint config file #789

Draft
wants to merge 13 commits into
base: trunk
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ swiftlint_version: 0.54.0
parent_config: https://raw.githubusercontent.com/Automattic/swiftlint-config/0f8ab6388bd8d15a04391825ab125f80cfb90704/.swiftlint.yml
remote_timeout: 10.0

excluded:
.build # `swift build` etc. output folder

opt_in_rules:
- overridden_super_call
- discarded_notification_center_observer
Expand Down
122 changes: 122 additions & 0 deletions Package.resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"pins" : [
{
"identity" : "alamofire",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Alamofire/Alamofire",
"state" : {
"revision" : "f455c2975872ccd2d9c81594c658af65716e9b9a",
"version" : "5.9.1"
}
},
{
"identity" : "collectionconcurrencykit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/JohnSundell/CollectionConcurrencyKit.git",
"state" : {
"revision" : "b4f23e24b5a1bff301efc5e70871083ca029ff95",
"version" : "0.2.0"
}
},
{
"identity" : "cryptoswift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/krzyzanowskim/CryptoSwift.git",
"state" : {
"revision" : "7892a123f7e8d0fe62f9f03728b17bbd4f94df5c",
"version" : "1.8.1"
}
},
{
"identity" : "ohhttpstubs",
"kind" : "remoteSourceControl",
"location" : "https://github.com/AliSoftware/OHHTTPStubs",
"state" : {
"revision" : "12f19662426d0434d6c330c6974d53e2eb10ecd9",
"version" : "9.1.0"
}
},
{
"identity" : "sourcekitten",
"kind" : "remoteSourceControl",
"location" : "https://github.com/jpsim/SourceKitten.git",
"state" : {
"revision" : "b6dc09ee51dfb0c66e042d2328c017483a1a5d56",
"version" : "0.34.1"
}
},
{
"identity" : "swift-argument-parser",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-argument-parser.git",
"state" : {
"revision" : "8f4d2753f0e4778c76d5f05ad16c74f707390531",
"version" : "1.2.3"
}
},
{
"identity" : "swift-syntax",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-syntax.git",
"state" : {
"revision" : "6ad4ea24b01559dde0773e3d091f1b9e36175036",
"version" : "509.0.2"
}
},
{
"identity" : "swiftlint",
"kind" : "remoteSourceControl",
"location" : "https://github.com/realm/SwiftLint",
"state" : {
"revision" : "f17a4f9dfb6a6afb0408426354e4180daaf49cee",
"version" : "0.54.0"
}
},
{
"identity" : "swiftytexttable",
"kind" : "remoteSourceControl",
"location" : "https://github.com/scottrhoyt/SwiftyTextTable.git",
"state" : {
"revision" : "c6df6cf533d120716bff38f8ff9885e1ce2a4ac3",
"version" : "0.9.0"
}
},
{
"identity" : "swxmlhash",
"kind" : "remoteSourceControl",
"location" : "https://github.com/drmohundro/SWXMLHash.git",
"state" : {
"revision" : "a853604c9e9a83ad9954c7e3d2a565273982471f",
"version" : "7.0.2"
}
},
{
"identity" : "wordpress-ios-shared",
"kind" : "remoteSourceControl",
"location" : "https://github.com/wordpress-mobile/WordPress-iOS-Shared.git",
"state" : {
"branch" : "mokagio/swiftlint-read-as-dependency",
"revision" : "422950b28f01d7cc11218e7d70a6cd65004d23ae"
}
},
{
"identity" : "wpxmlrpc",
"kind" : "remoteSourceControl",
"location" : "https://github.com/wordpress-mobile/wpxmlrpc",
"state" : {
"revision" : "bfc413d336bdeaab89e62dc483380baa99b2257e",
"version" : "0.10.0"
}
},
{
"identity" : "yams",
"kind" : "remoteSourceControl",
"location" : "https://github.com/jpsim/Yams.git",
"state" : {
"revision" : "8a835d918245ca22f36663dd3862138805d7f707",
"version" : "5.1.0"
}
}
],
"version" : 2
}
40 changes: 37 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,46 @@ import PackageDescription

let package = Package(
name: "WordPressKit",
platforms: [.iOS(.v13)],
platforms: [
.iOS(.v13),
// The package(s) are meant for iOS only, but the use of the SwiftLint plugin down the dependency chain requires specifying a compatible macOS version.
.macOS(.v12),
],
products: [
.library(name: "APIInterface", targets: ["APIInterface"]),
.library(name: "CoreAPI", targets: ["CoreAPI"]),
],
dependencies: [
// .package(url: "https://github.com/wordpress-mobile/WordPress-iOS-Shared.git", from: "2.3.1"),
// See https://github.com/wordpress-mobile/WordPress-iOS-Shared/pull/354
.package(url: "https://github.com/wordpress-mobile/WordPress-iOS-Shared.git", branch: "mokagio/swift-5.10-toolchain"),
.package(url: "https://github.com/wordpress-mobile/wpxmlrpc", from: "0.10.0"),
// Test dependencies
.package(url: "https://github.com/AliSoftware/OHHTTPStubs", from: "9.1.0"),
.package(url: "https://github.com/Alamofire/Alamofire", from: "5.8.1"),
],
dependencies: [],
targets: [
.target(name: "APIInterface")
.target(name: "APIInterface"),
.target(
name: "CoreAPI",
dependencies: [
.target(name: "APIInterface"),
.product(name: "WordPressShared", package: "WordPress-iOS-Shared"),
"wpxmlrpc"
]
),
.testTarget(
name: "CoreAPITests",
dependencies: [
.target(name: "CoreAPI"),
.product(name: "OHHTTPStubs", package: "OHHTTPStubs"),
.product(name: "OHHTTPStubsSwift", package: "OHHTTPStubs"),
"Alamofire",
],
path: "Tests/CoreAPITests",
resources: [
.process("Stubs") // Relative to path
]
),
]
)
55 changes: 55 additions & 0 deletions Sources/APIInterface/WordPressComRESTAPIVersionedPathBuilder.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#import <Foundation/Foundation.h>
#import "WordPressKit/WordPressComRESTAPIVersionedPathBuilder.h"

static NSString* const WordPressComRESTApiVersionStringInvalid = @"invalid_api_version";
static NSString* const WordPressComRESTApiVersionString_1_0 = @"rest/v1";
static NSString* const WordPressComRESTApiVersionString_1_1 = @"rest/v1.1";
static NSString* const WordPressComRESTApiVersionString_1_2 = @"rest/v1.2";
static NSString* const WordPressComRESTApiVersionString_1_3 = @"rest/v1.3";
static NSString* const WordPressComRESTApiVersionString_2_0 = @"wpcom/v2";

@implementation WordPressComRESTAPIVersionedPathBuilder

+ (NSString *)pathForEndpoint:(NSString *)endpoint
withVersion:(WordPressComRESTAPIVersion)apiVersion
{
NSString *apiVersionString = [self apiVersionStringWithEnumValue:apiVersion];

return [NSString stringWithFormat:@"%@/%@", apiVersionString, endpoint];
}

+ (NSString *)apiVersionStringWithEnumValue:(WordPressComRESTAPIVersion)apiVersion
{
NSString *result = nil;

switch (apiVersion) {
case WordPressComRESTAPIVersion_1_0:
result = WordPressComRESTApiVersionString_1_0;
break;

case WordPressComRESTAPIVersion_1_1:
result = WordPressComRESTApiVersionString_1_1;
break;

case WordPressComRESTAPIVersion_1_2:
result = WordPressComRESTApiVersionString_1_2;
break;

case WordPressComRESTAPIVersion_1_3:
result = WordPressComRESTApiVersionString_1_3;
break;

case WordPressComRESTAPIVersion_2_0:
result = WordPressComRESTApiVersionString_2_0;
break;

default:
NSAssert(NO, @"This should never by executed");
result = WordPressComRESTApiVersionStringInvalid;
break;
}

return result;
}

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#import <Foundation/Foundation.h>
#import <WordPressKit/WordPressComRESTAPIVersion.h>

@interface WordPressComRESTAPIVersionedPathBuilder: NSObject

+ (NSString *)pathForEndpoint:(NSString *)endpoint
withVersion:(WordPressComRESTAPIVersion)apiVersion
NS_SWIFT_NAME(path(forEndpoint:withVersion:));

@end
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
* @brief The API object to use for communications.
*/
// TODO: This needs to go before being able to put this ObjC in a package.
@property (nonatomic, strong, readonly) WordPressComRestApi *wordPressComRestApi;

/**
Expand Down
29 changes: 29 additions & 0 deletions Sources/BasicBlogAPIObjc/ServiceRemoteWordPressComREST.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#import "ServiceRemoteWordPressComREST.h"
#import "WPKit-Swift.h"

@implementation ServiceRemoteWordPressComREST

- (instancetype)initWithWordPressComRestApi:(WordPressComRestApi *)wordPressComRestApi {

NSParameterAssert([wordPressComRestApi isKindOfClass:[WordPressComRestApi class]]);

self = [super init];
if (self) {
_wordPressComRestApi = wordPressComRestApi;
_wordPressComRESTAPI = wordPressComRestApi;
}
return self;
}

#pragma mark - Request URL construction

- (NSString *)pathForEndpoint:(NSString *)resourceUrl
withVersion:(WordPressComRESTAPIVersion)apiVersion
{
NSParameterAssert([resourceUrl isKindOfClass:[NSString class]]);

return [WordPressComRESTAPIVersionedPathBuilder pathForEndpoint:resourceUrl
withVersion:apiVersion];
}

@end
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Foundation

extension Date {

/// Parses a date string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Foundation

extension DateFormatter {

/// A `DateFormatter` configured to manage dates compatible with the WordPress.com API.
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Foundation
import UIKit

/// URLAuthenticationChallenge Handler: It's up to the Host App to actually use this, whenever `WordPressOrgXMLRPCApi.onChallenge` is hit!
///
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
extension Swift.Result {
public extension Swift.Result {

// Notice there are no explicit unit tests for this utility because it is implicitly tested via the consuming code's tests.
func execute(onSuccess: (Success) -> Void, onFailure: (Failure) -> Void) {
Expand Down
44 changes: 44 additions & 0 deletions Sources/CoreAPI/StringEncoding+IANA.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import Foundation

extension String.Encoding {
/// See: https://www.iana.org/assignments/character-sets/character-sets.xhtml
init?(ianaCharsetName: String) {
let encoding: CFStringEncoding = CFStringConvertIANACharSetNameToEncoding(ianaCharsetName as CFString)
guard encoding != kCFStringEncodingInvalidId,
let builtInEncoding = CFStringBuiltInEncodings(rawValue: encoding)
else {
return nil
}

switch builtInEncoding {
case .macRoman:
self = .macOSRoman
case .windowsLatin1:
self = .windowsCP1252
case .isoLatin1:
self = .isoLatin1
case .nextStepLatin:
self = .nextstep
case .ASCII:
self = .ascii
case .unicode:
self = .unicode
case .UTF8:
self = .utf8
case .nonLossyASCII:
self = .nonLossyASCII
case .UTF16BE:
self = .utf16BigEndian
case .UTF16LE:
self = .utf16LittleEndian
case .UTF32:
self = .utf32
case .UTF32BE:
self = .utf32BigEndian
case .UTF32LE:
self = .utf32LittleEndian
@unknown default:
return nil
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ public final class WordPressComOAuthClient: NSObject {
.mapSuccess { response in
let responseObject = try JSONSerialization.jsonObject(with: response.body)

WPKitLogVerbose("Received OAuth2 response: \(self.cleanedUpResponseForLogging(responseObject as AnyObject? ?? "nil" as AnyObject))")
// WPKitLogVerbose("Received OAuth2 response: \(self.cleanedUpResponseForLogging(responseObject as AnyObject? ?? "nil" as AnyObject))")

guard let responseDictionary = responseObject as? [String: AnyObject] else {
throw URLError(.cannotParseResponse)
Expand Down Expand Up @@ -380,7 +380,7 @@ public final class WordPressComOAuthClient: NSObject {
.perform(request: builder, errorType: AuthenticationFailure.self)
.mapUnacceptableStatusCodeError(AuthenticationFailure.init(response:body:))
.mapSuccess { response in
WPKitLogVerbose("Received Social Login Oauth response.")
// WPKitLogVerbose("Received Social Login Oauth response.")

// Make sure we received expected data.
let responseObject = try? JSONSerialization.jsonObject(with: response.body)
Expand Down Expand Up @@ -700,7 +700,7 @@ public final class WordPressComOAuthClient: NSObject {
.mapSuccess { response in
let responseObject = try JSONSerialization.jsonObject(with: response.body)

WPKitLogVerbose("Received Social Login Oauth response: \(self.cleanedUpResponseForLogging(responseObject as AnyObject? ?? "nil" as AnyObject))")
// WPKitLogVerbose("Received Social Login Oauth response: \(self.cleanedUpResponseForLogging(responseObject as AnyObject? ?? "nil" as AnyObject))")
guard let responseDictionary = responseObject as? [String: AnyObject],
let responseData = responseDictionary["data"] as? [String: AnyObject],
let authToken = responseData["bearer_token"] as? String else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#if SWIFT_PACKAGE
import APIInterface
#endif
import Foundation
import WordPressShared

Expand Down
Loading