Make the OAuthAuthorizationClient an implementation detail the Account.framework.
This commit is contained in:
parent
39c7bdb5e2
commit
8c27187ad8
|
@ -308,24 +308,16 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var oauthAuthorizationClient: OAuthAuthorizationClient? {
|
internal static func oauthAuthorizationClient(for type: AccountType) -> OAuthAuthorizationClient {
|
||||||
get {
|
switch type {
|
||||||
guard let oauthGrantingAccount = delegate as? OAuthAuthorizationGranting else {
|
case .feedly:
|
||||||
assertionFailure()
|
return FeedlyAccountDelegate.environment.oauthAuthorizationClient
|
||||||
return nil
|
default:
|
||||||
}
|
fatalError("\(type) is not a client for OAuth authorization code granting.")
|
||||||
return oauthGrantingAccount.oauthAuthorizationClient
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
guard var oauthGrantingAccount = delegate as? OAuthAuthorizationGranting else {
|
|
||||||
assertionFailure()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
oauthGrantingAccount.oauthAuthorizationClient = newValue
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func oauthAuthorizationCodeGrantRequest(for type: AccountType, client: OAuthAuthorizationClient) -> URLRequest {
|
public static func oauthAuthorizationCodeGrantRequest(for type: AccountType) -> URLRequest {
|
||||||
let grantingType: OAuthAuthorizationGranting.Type
|
let grantingType: OAuthAuthorizationGranting.Type
|
||||||
switch type {
|
switch type {
|
||||||
case .feedly:
|
case .feedly:
|
||||||
|
@ -334,7 +326,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
|
||||||
fatalError("\(type) does not support OAuth authorization code granting.")
|
fatalError("\(type) does not support OAuth authorization code granting.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return grantingType.oauthAuthorizationCodeGrantRequest(for: client)
|
return grantingType.oauthAuthorizationCodeGrantRequest()
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func requestOAuthAccessToken(with response: OAuthAuthorizationResponse,
|
public static func requestOAuthAccessToken(with response: OAuthAuthorizationResponse,
|
||||||
|
@ -351,7 +343,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
|
||||||
fatalError("\(accountType) does not support OAuth authorization code granting.")
|
fatalError("\(accountType) does not support OAuth authorization code granting.")
|
||||||
}
|
}
|
||||||
|
|
||||||
grantingType.requestOAuthAccessToken(with: response, client: client, transport: transport, completionHandler: completionHandler)
|
grantingType.requestOAuthAccessToken(with: response, transport: transport, completionHandler: completionHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func refreshAll(completion: @escaping (Result<Void, Error>) -> Void) {
|
public func refreshAll(completion: @escaping (Result<Void, Error>) -> Void) {
|
||||||
|
|
|
@ -120,6 +120,8 @@
|
||||||
9E85C8E82366FF4200D0F1F7 /* TestGetPagedStreamContentsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E85C8E72366FF4200D0F1F7 /* TestGetPagedStreamContentsService.swift */; };
|
9E85C8E82366FF4200D0F1F7 /* TestGetPagedStreamContentsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E85C8E72366FF4200D0F1F7 /* TestGetPagedStreamContentsService.swift */; };
|
||||||
9E85C8EB236700E600D0F1F7 /* FeedlyGetEntriesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E85C8E9236700AD00D0F1F7 /* FeedlyGetEntriesOperation.swift */; };
|
9E85C8EB236700E600D0F1F7 /* FeedlyGetEntriesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E85C8E9236700AD00D0F1F7 /* FeedlyGetEntriesOperation.swift */; };
|
||||||
9E85C8ED2367020700D0F1F7 /* FeedlyGetEntriesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E85C8EC2367020700D0F1F7 /* FeedlyGetEntriesService.swift */; };
|
9E85C8ED2367020700D0F1F7 /* FeedlyGetEntriesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E85C8EC2367020700D0F1F7 /* FeedlyGetEntriesService.swift */; };
|
||||||
|
9E964EB823754AC400A7AF2E /* OAuthAuthorizationClient+Feedly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E964E9E23754AC400A7AF2E /* OAuthAuthorizationClient+Feedly.swift */; };
|
||||||
|
9E964EBA23754B4000A7AF2E /* OAuthAccountAuthorizationOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E964EB923754B4000A7AF2E /* OAuthAccountAuthorizationOperation.swift */; };
|
||||||
9EA3133B231E368100268BA0 /* FeedlyAccountDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3133A231E368100268BA0 /* FeedlyAccountDelegate.swift */; };
|
9EA3133B231E368100268BA0 /* FeedlyAccountDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3133A231E368100268BA0 /* FeedlyAccountDelegate.swift */; };
|
||||||
9EAEC60C2332FE830085D7C9 /* FeedlyCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EAEC60B2332FE830085D7C9 /* FeedlyCollection.swift */; };
|
9EAEC60C2332FE830085D7C9 /* FeedlyCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EAEC60B2332FE830085D7C9 /* FeedlyCollection.swift */; };
|
||||||
9EAEC60E2332FEC20085D7C9 /* FeedlyFeed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EAEC60D2332FEC20085D7C9 /* FeedlyFeed.swift */; };
|
9EAEC60E2332FEC20085D7C9 /* FeedlyFeed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EAEC60D2332FEC20085D7C9 /* FeedlyFeed.swift */; };
|
||||||
|
@ -320,6 +322,8 @@
|
||||||
9E85C8E72366FF4200D0F1F7 /* TestGetPagedStreamContentsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestGetPagedStreamContentsService.swift; sourceTree = "<group>"; };
|
9E85C8E72366FF4200D0F1F7 /* TestGetPagedStreamContentsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestGetPagedStreamContentsService.swift; sourceTree = "<group>"; };
|
||||||
9E85C8E9236700AD00D0F1F7 /* FeedlyGetEntriesOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyGetEntriesOperation.swift; sourceTree = "<group>"; };
|
9E85C8E9236700AD00D0F1F7 /* FeedlyGetEntriesOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyGetEntriesOperation.swift; sourceTree = "<group>"; };
|
||||||
9E85C8EC2367020700D0F1F7 /* FeedlyGetEntriesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyGetEntriesService.swift; sourceTree = "<group>"; };
|
9E85C8EC2367020700D0F1F7 /* FeedlyGetEntriesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyGetEntriesService.swift; sourceTree = "<group>"; };
|
||||||
|
9E964E9E23754AC400A7AF2E /* OAuthAuthorizationClient+Feedly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OAuthAuthorizationClient+Feedly.swift"; sourceTree = "<group>"; };
|
||||||
|
9E964EB923754B4000A7AF2E /* OAuthAccountAuthorizationOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthAccountAuthorizationOperation.swift; sourceTree = "<group>"; };
|
||||||
9EA3133A231E368100268BA0 /* FeedlyAccountDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedlyAccountDelegate.swift; sourceTree = "<group>"; };
|
9EA3133A231E368100268BA0 /* FeedlyAccountDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedlyAccountDelegate.swift; sourceTree = "<group>"; };
|
||||||
9EAEC60B2332FE830085D7C9 /* FeedlyCollection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyCollection.swift; sourceTree = "<group>"; };
|
9EAEC60B2332FE830085D7C9 /* FeedlyCollection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyCollection.swift; sourceTree = "<group>"; };
|
||||||
9EAEC60D2332FEC20085D7C9 /* FeedlyFeed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyFeed.swift; sourceTree = "<group>"; };
|
9EAEC60D2332FEC20085D7C9 /* FeedlyFeed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedlyFeed.swift; sourceTree = "<group>"; };
|
||||||
|
@ -616,7 +620,9 @@
|
||||||
9EE4CCF9234F106600FBAE4B /* FeedlyFeedContainerValidator.swift */,
|
9EE4CCF9234F106600FBAE4B /* FeedlyFeedContainerValidator.swift */,
|
||||||
9ECC9A84234DC16E009B5144 /* FeedlyAccountDelegateError.swift */,
|
9ECC9A84234DC16E009B5144 /* FeedlyAccountDelegateError.swift */,
|
||||||
9EC688EB232C583300A8D0A2 /* FeedlyAccountDelegate+OAuth.swift */,
|
9EC688EB232C583300A8D0A2 /* FeedlyAccountDelegate+OAuth.swift */,
|
||||||
|
9E964E9E23754AC400A7AF2E /* OAuthAuthorizationClient+Feedly.swift */,
|
||||||
9EC688ED232C58E800A8D0A2 /* OAuthAuthorizationCodeGranting.swift */,
|
9EC688ED232C58E800A8D0A2 /* OAuthAuthorizationCodeGranting.swift */,
|
||||||
|
9E964EB923754B4000A7AF2E /* OAuthAccountAuthorizationOperation.swift */,
|
||||||
9E672395236F7E68000BE141 /* OAuthAcessTokenRefreshing.swift */,
|
9E672395236F7E68000BE141 /* OAuthAcessTokenRefreshing.swift */,
|
||||||
9EC688E9232B973C00A8D0A2 /* FeedlyAPICaller.swift */,
|
9EC688E9232B973C00A8D0A2 /* FeedlyAPICaller.swift */,
|
||||||
9E510D6D234F16A8002E6F1A /* FeedlyAddFeedRequest.swift */,
|
9E510D6D234F16A8002E6F1A /* FeedlyAddFeedRequest.swift */,
|
||||||
|
@ -716,7 +722,9 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 8489350A1F62485000CEBD24 /* Build configuration list for PBXNativeTarget "Account" */;
|
buildConfigurationList = 8489350A1F62485000CEBD24 /* Build configuration list for PBXNativeTarget "Account" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
9E964EBB2375512300A7AF2E /* Run Script: Update OAuthAuthorizationClient+Feedly.swift */,
|
||||||
848934F11F62484F00CEBD24 /* Sources */,
|
848934F11F62484F00CEBD24 /* Sources */,
|
||||||
|
9E964EBC2375517100A7AF2E /* Run Script: Reset OAuthAuthorizationClient+Feedly.swift */,
|
||||||
848934F21F62484F00CEBD24 /* Frameworks */,
|
848934F21F62484F00CEBD24 /* Frameworks */,
|
||||||
848934F31F62484F00CEBD24 /* Headers */,
|
848934F31F62484F00CEBD24 /* Headers */,
|
||||||
848934F41F62484F00CEBD24 /* Resources */,
|
848934F41F62484F00CEBD24 /* Resources */,
|
||||||
|
@ -889,6 +897,42 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "xcrun -sdk macosx swiftc -target x86_64-macosx10.11 ../../buildscripts/VerifyNoBuildSettings.swift -o $CONFIGURATION_TEMP_DIR/VerifyNoBS\n$CONFIGURATION_TEMP_DIR/VerifyNoBS ${PROJECT_NAME}.xcodeproj/project.pbxproj\n";
|
shellScript = "xcrun -sdk macosx swiftc -target x86_64-macosx10.11 ../../buildscripts/VerifyNoBuildSettings.swift -o $CONFIGURATION_TEMP_DIR/VerifyNoBS\n$CONFIGURATION_TEMP_DIR/VerifyNoBS ${PROJECT_NAME}.xcodeproj/project.pbxproj\n";
|
||||||
};
|
};
|
||||||
|
9E964EBB2375512300A7AF2E /* Run Script: Update OAuthAuthorizationClient+Feedly.swift */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "Run Script: Update OAuthAuthorizationClient+Feedly.swift";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "FAILED=false\n\nif [ -z \"${FEEDLY_CLIENT_ID}\" ]; then\necho \"Missing Feedly Client ID\"\nFAILED=true\nfi\n\nif [ -z \"${FEEDLY_CLIENT_SECRET}\" ]; then\necho \"Missing Feedly Client Secret\"\nFAILED=true\nfi\n\nFEEDLY_CLIENT_SOURCE=\"${SRCROOT}/Feedly/OAuthAuthorizationClient+Feedly.swift\"\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedly client ID or secret. ${FEEDLY_CLIENT_SOURCE} not changed.\"\nexit 0\nfi\n\n# echo \"Substituting variables in: ${FEEDLY_CLIENT_SOURCE}\"\n\nif [ -e \"${FEEDLY_CLIENT_SOURCE}\" ]\nthen\n sed -i .tmp \"s|{FEEDLY_CLIENT_ID}|${FEEDLY_CLIENT_ID}|g; s|{FEEDLY_CLIENT_SECRET}|${FEEDLY_CLIENT_SECRET}|g\" $FEEDLY_CLIENT_SOURCE\n # echo \"`git diff ${FEEDLY_CLIENT_SOURCE}`\"\n rm -f \"${FEEDLY_CLIENT_SOURCE}.tmp\"\nelse\n echo \"File does not exist at ${FEEDLY_CLIENT_SOURCE}. Has it been moved or renamed?\"\n exit -1\nfi\n\necho \"All env values found!\"\n";
|
||||||
|
};
|
||||||
|
9E964EBC2375517100A7AF2E /* Run Script: Reset OAuthAuthorizationClient+Feedly.swift */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "Run Script: Reset OAuthAuthorizationClient+Feedly.swift";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "git checkout \"${SRCROOT}/Feedly/OAuthAuthorizationClient+Feedly.swift\"\n";
|
||||||
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
@ -932,6 +976,7 @@
|
||||||
9E85C8EB236700E600D0F1F7 /* FeedlyGetEntriesOperation.swift in Sources */,
|
9E85C8EB236700E600D0F1F7 /* FeedlyGetEntriesOperation.swift in Sources */,
|
||||||
9E1D154D233370D800F4944C /* FeedlySyncAllOperation.swift in Sources */,
|
9E1D154D233370D800F4944C /* FeedlySyncAllOperation.swift in Sources */,
|
||||||
844B297D2106C7EC004020B3 /* Feed.swift in Sources */,
|
844B297D2106C7EC004020B3 /* Feed.swift in Sources */,
|
||||||
|
9E964EBA23754B4000A7AF2E /* OAuthAccountAuthorizationOperation.swift in Sources */,
|
||||||
9E1D15572334355900F4944C /* FeedlyRequestStreamsOperation.swift in Sources */,
|
9E1D15572334355900F4944C /* FeedlyRequestStreamsOperation.swift in Sources */,
|
||||||
9E1D15512334282100F4944C /* FeedlyMirrorCollectionsAsFoldersOperation.swift in Sources */,
|
9E1D15512334282100F4944C /* FeedlyMirrorCollectionsAsFoldersOperation.swift in Sources */,
|
||||||
9E1773D7234575AB0056A5A8 /* FeedlyTag.swift in Sources */,
|
9E1773D7234575AB0056A5A8 /* FeedlyTag.swift in Sources */,
|
||||||
|
@ -972,6 +1017,7 @@
|
||||||
9EC688EA232B973C00A8D0A2 /* FeedlyAPICaller.swift in Sources */,
|
9EC688EA232B973C00A8D0A2 /* FeedlyAPICaller.swift in Sources */,
|
||||||
9E1773D32345700F0056A5A8 /* FeedlyLink.swift in Sources */,
|
9E1773D32345700F0056A5A8 /* FeedlyLink.swift in Sources */,
|
||||||
9EAEC62823331C350085D7C9 /* FeedlyCategory.swift in Sources */,
|
9EAEC62823331C350085D7C9 /* FeedlyCategory.swift in Sources */,
|
||||||
|
9E964EB823754AC400A7AF2E /* OAuthAuthorizationClient+Feedly.swift in Sources */,
|
||||||
9EF1B10923590E93000A486A /* FeedlyStreamIds.swift in Sources */,
|
9EF1B10923590E93000A486A /* FeedlyStreamIds.swift in Sources */,
|
||||||
84D09623217418DC00D77525 /* FeedbinTagging.swift in Sources */,
|
84D09623217418DC00D77525 /* FeedbinTagging.swift in Sources */,
|
||||||
84CAD7161FDF2E22000F0755 /* FeedbinEntry.swift in Sources */,
|
84CAD7161FDF2E22000F0755 /* FeedbinEntry.swift in Sources */,
|
||||||
|
|
|
@ -28,6 +28,15 @@ final class FeedlyAPICaller {
|
||||||
}
|
}
|
||||||
return components
|
return components
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var oauthAuthorizationClient: OAuthAuthorizationClient {
|
||||||
|
switch self {
|
||||||
|
case .sandbox:
|
||||||
|
return .feedlySandboxClient
|
||||||
|
case .cloud:
|
||||||
|
return .feedlyCloudClient
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private let transport: Transport
|
private let transport: Transport
|
||||||
|
|
|
@ -27,7 +27,8 @@ extension FeedlyAccountDelegate: OAuthAuthorizationGranting {
|
||||||
|
|
||||||
private static let oauthAuthorizationGrantScope = "https://cloud.feedly.com/subscriptions"
|
private static let oauthAuthorizationGrantScope = "https://cloud.feedly.com/subscriptions"
|
||||||
|
|
||||||
static func oauthAuthorizationCodeGrantRequest(for client: OAuthAuthorizationClient) -> URLRequest {
|
static func oauthAuthorizationCodeGrantRequest() -> URLRequest {
|
||||||
|
let client = environment.oauthAuthorizationClient
|
||||||
let authorizationRequest = OAuthAuthorizationRequest(clientId: client.id,
|
let authorizationRequest = OAuthAuthorizationRequest(clientId: client.id,
|
||||||
redirectUri: client.redirectUri,
|
redirectUri: client.redirectUri,
|
||||||
scope: oauthAuthorizationGrantScope,
|
scope: oauthAuthorizationGrantScope,
|
||||||
|
@ -36,7 +37,8 @@ extension FeedlyAccountDelegate: OAuthAuthorizationGranting {
|
||||||
return FeedlyAPICaller.authorizationCodeUrlRequest(for: authorizationRequest, baseUrlComponents: baseURLComponents)
|
return FeedlyAPICaller.authorizationCodeUrlRequest(for: authorizationRequest, baseUrlComponents: baseURLComponents)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func requestOAuthAccessToken(with response: OAuthAuthorizationResponse, client: OAuthAuthorizationClient, transport: Transport, completionHandler: @escaping (Result<OAuthAuthorizationGrant, Error>) -> ()) {
|
static func requestOAuthAccessToken(with response: OAuthAuthorizationResponse, transport: Transport, completionHandler: @escaping (Result<OAuthAuthorizationGrant, Error>) -> ()) {
|
||||||
|
let client = environment.oauthAuthorizationClient
|
||||||
let request = OAuthAccessTokenRequest(authorizationResponse: response,
|
let request = OAuthAccessTokenRequest(authorizationResponse: response,
|
||||||
scope: oauthAuthorizationGrantScope,
|
scope: oauthAuthorizationGrantScope,
|
||||||
client: client)
|
client: client)
|
||||||
|
|
|
@ -24,8 +24,6 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||||
if let token = ProcessInfo.processInfo.environment["FEEDLY_DEV_ACCESS_TOKEN"], !token.isEmpty {
|
if let token = ProcessInfo.processInfo.environment["FEEDLY_DEV_ACCESS_TOKEN"], !token.isEmpty {
|
||||||
return .cloud
|
return .cloud
|
||||||
}
|
}
|
||||||
// To debug on a different Feedly environment, do a workspace search for `FEEDLY_ENVIRONMENT`
|
|
||||||
// and ensure the environment matches the client.
|
|
||||||
return .sandbox
|
return .sandbox
|
||||||
#else
|
#else
|
||||||
return .cloud
|
return .cloud
|
||||||
|
@ -55,7 +53,7 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var oauthAuthorizationClient: OAuthAuthorizationClient?
|
let oauthAuthorizationClient: OAuthAuthorizationClient
|
||||||
|
|
||||||
var accountMetadata: AccountMetadata?
|
var accountMetadata: AccountMetadata?
|
||||||
|
|
||||||
|
@ -101,6 +99,7 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||||
|
|
||||||
let databaseFilePath = (dataFolder as NSString).appendingPathComponent("Sync.sqlite3")
|
let databaseFilePath = (dataFolder as NSString).appendingPathComponent("Sync.sqlite3")
|
||||||
self.database = SyncDatabase(databaseFilePath: databaseFilePath)
|
self.database = SyncDatabase(databaseFilePath: databaseFilePath)
|
||||||
|
self.oauthAuthorizationClient = api.oauthAuthorizationClient
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Account API
|
// MARK: Account API
|
||||||
|
@ -488,12 +487,8 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||||
func accountDidInitialize(_ account: Account) {
|
func accountDidInitialize(_ account: Account) {
|
||||||
credentials = try? account.retrieveCredentials(type: .oauthAccessToken)
|
credentials = try? account.retrieveCredentials(type: .oauthAccessToken)
|
||||||
|
|
||||||
if let client = oauthAuthorizationClient {
|
let refreshAccessToken = FeedlyRefreshAccessTokenOperation(account: account, service: self, oauthClient: oauthAuthorizationClient, log: log)
|
||||||
let refreshAccessToken = FeedlyRefreshAccessTokenOperation(account: account, service: self, oauthClient: client, log: log)
|
|
||||||
operationQueue.addOperation(refreshAccessToken)
|
operationQueue.addOperation(refreshAccessToken)
|
||||||
} else {
|
|
||||||
os_log(.debug, log: log, "*** WARNING! Not refreshing token because the oauthAuthorizationClient has not been injected. ***")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
static func validateCredentials(transport: Transport, credentials: Credentials, endpoint: URL?, completion: @escaping (Result<Credentials?, Error>) -> Void) {
|
||||||
|
|
|
@ -7,28 +7,27 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import Account
|
|
||||||
import AuthenticationServices
|
import AuthenticationServices
|
||||||
|
|
||||||
protocol OAuthAccountAuthorizationOperationDelegate: class {
|
public protocol OAuthAccountAuthorizationOperationDelegate: class {
|
||||||
func oauthAccountAuthorizationOperation(_ operation: OAuthAccountAuthorizationOperation, didFailWith error: Error)
|
func oauthAccountAuthorizationOperation(_ operation: OAuthAccountAuthorizationOperation, didFailWith error: Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPresentationContextProviding {
|
public final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPresentationContextProviding {
|
||||||
|
|
||||||
weak var presentationAnchor: ASPresentationAnchor?
|
public weak var presentationAnchor: ASPresentationAnchor?
|
||||||
weak var delegate: OAuthAccountAuthorizationOperationDelegate?
|
public weak var delegate: OAuthAccountAuthorizationOperationDelegate?
|
||||||
|
|
||||||
private let accountType: AccountType
|
private let accountType: AccountType
|
||||||
private let oauthClient: OAuthAuthorizationClient
|
private let oauthClient: OAuthAuthorizationClient
|
||||||
private var session: ASWebAuthenticationSession?
|
private var session: ASWebAuthenticationSession?
|
||||||
|
|
||||||
init(accountType: AccountType, oauthClient: OAuthAuthorizationClient) {
|
public init(accountType: AccountType) {
|
||||||
self.accountType = accountType
|
self.accountType = accountType
|
||||||
self.oauthClient = oauthClient
|
self.oauthClient = Account.oauthAuthorizationClient(for: accountType)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func main() {
|
override public func main() {
|
||||||
assert(Thread.isMainThread)
|
assert(Thread.isMainThread)
|
||||||
assert(presentationAnchor != nil, "\(self) outlived presentation anchor.")
|
assert(presentationAnchor != nil, "\(self) outlived presentation anchor.")
|
||||||
|
|
||||||
|
@ -37,7 +36,7 @@ final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let request = Account.oauthAuthorizationCodeGrantRequest(for: accountType, client: oauthClient)
|
let request = Account.oauthAuthorizationCodeGrantRequest(for: accountType)
|
||||||
|
|
||||||
guard let url = request.url else {
|
guard let url = request.url else {
|
||||||
return DispatchQueue.main.async {
|
return DispatchQueue.main.async {
|
||||||
|
@ -63,7 +62,7 @@ final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPr
|
||||||
session.start()
|
session.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func cancel() {
|
override public func cancel() {
|
||||||
session?.cancel()
|
session?.cancel()
|
||||||
super.cancel()
|
super.cancel()
|
||||||
}
|
}
|
||||||
|
@ -94,7 +93,7 @@ final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
|
public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
|
||||||
guard let anchor = presentationAnchor else {
|
guard let anchor = presentationAnchor else {
|
||||||
fatalError("\(self) has outlived presentation anchor.")
|
fatalError("\(self) has outlived presentation anchor.")
|
||||||
}
|
}
|
||||||
|
@ -128,8 +127,6 @@ final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPr
|
||||||
// Now store the access token because we want the account delegate to use it.
|
// Now store the access token because we want the account delegate to use it.
|
||||||
try account.storeCredentials(grant.accessToken)
|
try account.storeCredentials(grant.accessToken)
|
||||||
|
|
||||||
account.oauthAuthorizationClient = oauthClient
|
|
||||||
|
|
||||||
didFinish()
|
didFinish()
|
||||||
} catch {
|
} catch {
|
||||||
didFinish(error)
|
didFinish(error)
|
||||||
|
@ -152,14 +149,14 @@ final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPr
|
||||||
didFinish()
|
didFinish()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func start() {
|
override public func start() {
|
||||||
isExecutingOperation = true
|
isExecutingOperation = true
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.main()
|
self.main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override var isExecuting: Bool {
|
override public var isExecuting: Bool {
|
||||||
return isExecutingOperation
|
return isExecutingOperation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +169,7 @@ final class OAuthAccountAuthorizationOperation: Operation, ASWebAuthenticationPr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override var isFinished: Bool {
|
override public var isFinished: Bool {
|
||||||
return isFinishedOperation
|
return isFinishedOperation
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
//
|
//
|
||||||
// OAuthAuthorizationClient+NetNewsWire.swift
|
// OAuthAuthorizationClient+NetNewsWire.swift
|
||||||
// NetNewsWire
|
// Account
|
||||||
//
|
//
|
||||||
// Created by Kiel Gillard on 8/11/19.
|
// Created by Kiel Gillard on 8/11/19.
|
||||||
// Copyright © 2019 Ranchero Software. All rights reserved.
|
// Copyright © 2019 Ranchero Software. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import Account
|
|
||||||
|
|
||||||
extension OAuthAuthorizationClient {
|
extension OAuthAuthorizationClient {
|
||||||
|
|
|
@ -166,9 +166,7 @@ public protocol OAuthAuthorizationCodeGrantRequesting {
|
||||||
|
|
||||||
protocol OAuthAuthorizationGranting: AccountDelegate {
|
protocol OAuthAuthorizationGranting: AccountDelegate {
|
||||||
|
|
||||||
var oauthAuthorizationClient: OAuthAuthorizationClient? { get set }
|
static func oauthAuthorizationCodeGrantRequest() -> URLRequest
|
||||||
|
|
||||||
static func oauthAuthorizationCodeGrantRequest(for client: OAuthAuthorizationClient) -> URLRequest
|
static func requestOAuthAccessToken(with response: OAuthAuthorizationResponse, transport: Transport, completionHandler: @escaping (Result<OAuthAuthorizationGrant, Error>) -> ())
|
||||||
|
|
||||||
static func requestOAuthAccessToken(with response: OAuthAuthorizationResponse, client: OAuthAuthorizationClient, transport: Transport, completionHandler: @escaping (Result<OAuthAuthorizationGrant, Error>) -> ())
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ PROVISIONING_PROFILE_SPECIFIER =
|
||||||
#include? "../../../SharedXcodeSettings/DeveloperSettings.xcconfig"
|
#include? "../../../SharedXcodeSettings/DeveloperSettings.xcconfig"
|
||||||
|
|
||||||
SDKROOT = macosx
|
SDKROOT = macosx
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.14
|
MACOSX_DEPLOYMENT_TARGET = 10.15
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0
|
||||||
SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator
|
SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ SWIFT_VERSION = 5.1
|
||||||
COMBINE_HIDPI_IMAGES = YES
|
COMBINE_HIDPI_IMAGES = YES
|
||||||
|
|
||||||
COPY_PHASE_STRIP = NO
|
COPY_PHASE_STRIP = NO
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.14
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO
|
ALWAYS_SEARCH_USER_PATHS = NO
|
||||||
CURRENT_PROJECT_VERSION = 1
|
CURRENT_PROJECT_VERSION = 1
|
||||||
VERSION_INFO_PREFIX =
|
VERSION_INFO_PREFIX =
|
||||||
|
|
|
@ -101,13 +101,7 @@ extension AccountsAddViewController: NSTableViewDelegate {
|
||||||
accountsReaderAPIWindowController.runSheetOnWindow(self.view.window!)
|
accountsReaderAPIWindowController.runSheetOnWindow(self.view.window!)
|
||||||
accountsAddWindowController = accountsReaderAPIWindowController
|
accountsAddWindowController = accountsReaderAPIWindowController
|
||||||
case .feedly:
|
case .feedly:
|
||||||
// To debug on a different Feedly environment, do a workspace search for `FEEDLY_ENVIRONMENT`
|
let addAccount = OAuthAccountAuthorizationOperation(accountType: .feedly)
|
||||||
// and ensure the environment matches the client.
|
|
||||||
#if DEBUG
|
|
||||||
let addAccount = OAuthAccountAuthorizationOperation(accountType: .feedly, oauthClient: .feedlySandboxClient)
|
|
||||||
#else
|
|
||||||
let addAccount = OAuthAccountAuthorizationOperation(accountType: .feedly, oauthClient: .feedlyCloudClient)
|
|
||||||
#endif
|
|
||||||
addAccount.delegate = self
|
addAccount.delegate = self
|
||||||
addAccount.presentationAnchor = self.view.window!
|
addAccount.presentationAnchor = self.view.window!
|
||||||
OperationQueue.main.addOperation(addAccount)
|
OperationQueue.main.addOperation(addAccount)
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14865.1" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
|
||||||
<dependencies>
|
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14865.1"/>
|
|
||||||
<plugIn identifier="com.apple.WebKit2IBPlugin" version="14865.1"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<objects>
|
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="AccountsFeedlyWebWindowController" customModule="NetNewsWire" customModuleProvider="target">
|
|
||||||
<connections>
|
|
||||||
<outlet property="webView" destination="W4c-Xp-rpq" id="l11-5B-8yc"/>
|
|
||||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
|
||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
|
||||||
<rect key="contentRect" x="196" y="240" width="480" height="708"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
|
|
||||||
<view key="contentView" id="se5-gp-TjO">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="708"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<wkWebView wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="W4c-Xp-rpq">
|
|
||||||
<rect key="frame" x="0.0" y="61" width="480" height="647"/>
|
|
||||||
<wkWebViewConfiguration key="configuration">
|
|
||||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
|
||||||
<wkPreferences key="preferences"/>
|
|
||||||
</wkWebViewConfiguration>
|
|
||||||
<connections>
|
|
||||||
<outlet property="navigationDelegate" destination="-2" id="wAp-Oh-5EK"/>
|
|
||||||
</connections>
|
|
||||||
</wkWebView>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PD2-Zk-3yM">
|
|
||||||
<rect key="frame" x="384" y="13" width="82" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="IEi-N0-sbw">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<string key="keyEquivalent" base64-UTF8="YES">
|
|
||||||
Gw
|
|
||||||
</string>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="cancel:" target="-2" id="5BT-to-e4W"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="W4c-Xp-rpq" secondAttribute="trailing" id="D9j-IU-BZj"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="PD2-Zk-3yM" secondAttribute="bottom" constant="20" symbolic="YES" id="Qdc-tu-9kO"/>
|
|
||||||
<constraint firstItem="W4c-Xp-rpq" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="V7Q-kM-JDA"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="PD2-Zk-3yM" secondAttribute="trailing" constant="20" symbolic="YES" id="bQS-L4-jbx"/>
|
|
||||||
<constraint firstItem="W4c-Xp-rpq" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="ec6-U0-t8X"/>
|
|
||||||
<constraint firstItem="PD2-Zk-3yM" firstAttribute="top" secondItem="W4c-Xp-rpq" secondAttribute="bottom" constant="20" symbolic="YES" id="zlA-8I-aKr"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
|
||||||
</connections>
|
|
||||||
<point key="canvasLocation" x="134" y="556"/>
|
|
||||||
</window>
|
|
||||||
</objects>
|
|
||||||
</document>
|
|
|
@ -1,102 +0,0 @@
|
||||||
//
|
|
||||||
// AccountsFeedlyWebWindowController.swift
|
|
||||||
// NetNewsWire
|
|
||||||
//
|
|
||||||
// Created by Kiel Gillard on 30/8/19.
|
|
||||||
// Copyright © 2019 Ranchero Software. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Cocoa
|
|
||||||
import Account
|
|
||||||
import WebKit
|
|
||||||
|
|
||||||
class AccountsFeedlyWebWindowController: NSWindowController, WKNavigationDelegate {
|
|
||||||
|
|
||||||
@IBOutlet private weak var webView: WKWebView!
|
|
||||||
|
|
||||||
private weak var hostWindow: NSWindow?
|
|
||||||
|
|
||||||
convenience init() {
|
|
||||||
self.init(windowNibName: NSNib.Name("AccountsFeedlyWeb"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: API
|
|
||||||
|
|
||||||
func runSheetOnWindow(_ hostWindow: NSWindow, completionHandler handler: ((NSApplication.ModalResponse) -> Void)? = nil) {
|
|
||||||
self.hostWindow = hostWindow
|
|
||||||
hostWindow.beginSheet(window!, completionHandler: handler)
|
|
||||||
beginAuthorization()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: Requesting an Access Token
|
|
||||||
let client = OAuthAuthorizationClient.feedlySandboxClient
|
|
||||||
|
|
||||||
private func beginAuthorization() {
|
|
||||||
let request = Account.oauthAuthorizationCodeGrantRequest(for: .feedly, client: client)
|
|
||||||
webView.load(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func requestAccessToken(for response: OAuthAuthorizationResponse) {
|
|
||||||
Account.requestOAuthAccessToken(with: response, client: client, accountType: .feedly) { [weak self] result in
|
|
||||||
switch result {
|
|
||||||
case .success(let tokenResponse):
|
|
||||||
self?.saveAccount(for: tokenResponse)
|
|
||||||
case .failure(let error):
|
|
||||||
NSApplication.shared.presentError(error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: Actions
|
|
||||||
|
|
||||||
@IBAction func cancel(_ sender: Any) {
|
|
||||||
hostWindow!.endSheet(window!, returnCode: NSApplication.ModalResponse.cancel)
|
|
||||||
}
|
|
||||||
|
|
||||||
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
|
|
||||||
|
|
||||||
do {
|
|
||||||
guard let url = navigationAction.request.url else { return }
|
|
||||||
|
|
||||||
let response = try OAuthAuthorizationResponse(url: url, client: client)
|
|
||||||
|
|
||||||
requestAccessToken(for: response)
|
|
||||||
|
|
||||||
// No point the web view trying to load this.
|
|
||||||
return decisionHandler(.cancel)
|
|
||||||
|
|
||||||
} catch let error as OAuthAuthorizationErrorResponse {
|
|
||||||
NSApplication.shared.presentError(error)
|
|
||||||
|
|
||||||
} catch {
|
|
||||||
print(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
decisionHandler(.allow)
|
|
||||||
}
|
|
||||||
|
|
||||||
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
|
|
||||||
print(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func saveAccount(for grant: OAuthAuthorizationGrant) {
|
|
||||||
// TODO: Find an already existing account for this username?
|
|
||||||
let account = AccountManager.shared.createAccount(type: .feedly)
|
|
||||||
do {
|
|
||||||
|
|
||||||
// Store the refresh token first because it sends this token to the account delegate.
|
|
||||||
if let token = grant.refreshToken {
|
|
||||||
try account.storeCredentials(token)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now store the access token because we want the account delegate to use it.
|
|
||||||
try account.storeCredentials(grant.accessToken)
|
|
||||||
|
|
||||||
account.oauthAuthorizationClient = client
|
|
||||||
|
|
||||||
self.hostWindow?.endSheet(self.window!, returnCode: NSApplication.ModalResponse.OK)
|
|
||||||
} catch {
|
|
||||||
NSApplication.shared.presentError(error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -276,7 +276,6 @@
|
||||||
65ED3FC9235DEF6C0081F399 /* SmartFeedPasteboardWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AD1EB92031649C00BC20B7 /* SmartFeedPasteboardWriter.swift */; };
|
65ED3FC9235DEF6C0081F399 /* SmartFeedPasteboardWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AD1EB92031649C00BC20B7 /* SmartFeedPasteboardWriter.swift */; };
|
||||||
65ED3FCA235DEF6C0081F399 /* SmartFeedsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CC88171FE59CBF00644329 /* SmartFeedsController.swift */; };
|
65ED3FCA235DEF6C0081F399 /* SmartFeedsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CC88171FE59CBF00644329 /* SmartFeedsController.swift */; };
|
||||||
65ED3FCB235DEF6C0081F399 /* SidebarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97621ED9EB96007D329B /* SidebarViewController.swift */; };
|
65ED3FCB235DEF6C0081F399 /* SidebarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97621ED9EB96007D329B /* SidebarViewController.swift */; };
|
||||||
65ED3FCC235DEF6C0081F399 /* AccountsFeedlyWebWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA33BB72318F8C10097B644 /* AccountsFeedlyWebWindowController.swift */; };
|
|
||||||
65ED3FCD235DEF6C0081F399 /* SidebarOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97601ED9EB96007D329B /* SidebarOutlineView.swift */; };
|
65ED3FCD235DEF6C0081F399 /* SidebarOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97601ED9EB96007D329B /* SidebarOutlineView.swift */; };
|
||||||
65ED3FCE235DEF6C0081F399 /* DetailKeyboardDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5127B236222B4849006D641D /* DetailKeyboardDelegate.swift */; };
|
65ED3FCE235DEF6C0081F399 /* DetailKeyboardDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5127B236222B4849006D641D /* DetailKeyboardDelegate.swift */; };
|
||||||
65ED3FCF235DEF6C0081F399 /* TimelineContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8405DD9822153B6B008CE1BF /* TimelineContainerView.swift */; };
|
65ED3FCF235DEF6C0081F399 /* TimelineContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8405DD9822153B6B008CE1BF /* TimelineContainerView.swift */; };
|
||||||
|
@ -307,7 +306,6 @@
|
||||||
65ED3FE8235DEF6C0081F399 /* ArticleStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97871ED9ECEF007D329B /* ArticleStyle.swift */; };
|
65ED3FE8235DEF6C0081F399 /* ArticleStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97871ED9ECEF007D329B /* ArticleStyle.swift */; };
|
||||||
65ED3FE9235DEF6C0081F399 /* FaviconURLFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */; };
|
65ED3FE9235DEF6C0081F399 /* FaviconURLFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */; };
|
||||||
65ED3FEA235DEF6C0081F399 /* SidebarViewController+ContextualMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */; };
|
65ED3FEA235DEF6C0081F399 /* SidebarViewController+ContextualMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */; };
|
||||||
65ED3FEB235DEF6C0081F399 /* (null) in Sources */ = {isa = PBXBuildFile; };
|
|
||||||
65ED3FEC235DEF6C0081F399 /* RSHTMLMetadata+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842611A11FCB769D0086A189 /* RSHTMLMetadata+Extension.swift */; };
|
65ED3FEC235DEF6C0081F399 /* RSHTMLMetadata+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842611A11FCB769D0086A189 /* RSHTMLMetadata+Extension.swift */; };
|
||||||
65ED3FED235DEF6C0081F399 /* SendToMarsEditCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A1500420048DDF0046AD9A /* SendToMarsEditCommand.swift */; };
|
65ED3FED235DEF6C0081F399 /* SendToMarsEditCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A1500420048DDF0046AD9A /* SendToMarsEditCommand.swift */; };
|
||||||
65ED3FEE235DEF6C0081F399 /* UserNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FE10022345529D0056195D /* UserNotificationManager.swift */; };
|
65ED3FEE235DEF6C0081F399 /* UserNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FE10022345529D0056195D /* UserNotificationManager.swift */; };
|
||||||
|
@ -407,7 +405,6 @@
|
||||||
65ED4050235DEF6C0081F399 /* DetailKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5127B237222B4849006D641D /* DetailKeyboardShortcuts.plist */; };
|
65ED4050235DEF6C0081F399 /* DetailKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5127B237222B4849006D641D /* DetailKeyboardShortcuts.plist */; };
|
||||||
65ED4051235DEF6C0081F399 /* TimelineKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845479871FEB77C000AD8B59 /* TimelineKeyboardShortcuts.plist */; };
|
65ED4051235DEF6C0081F399 /* TimelineKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845479871FEB77C000AD8B59 /* TimelineKeyboardShortcuts.plist */; };
|
||||||
65ED4052235DEF6C0081F399 /* template.html in Resources */ = {isa = PBXBuildFile; fileRef = 848362FE2262A30E00DA1D35 /* template.html */; };
|
65ED4052235DEF6C0081F399 /* template.html in Resources */ = {isa = PBXBuildFile; fileRef = 848362FE2262A30E00DA1D35 /* template.html */; };
|
||||||
65ED4053235DEF6C0081F399 /* AccountsFeedlyWeb.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9EA33BB82318F8C10097B644 /* AccountsFeedlyWeb.xib */; };
|
|
||||||
65ED4054235DEF6C0081F399 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 848363062262A3DD00DA1D35 /* Main.storyboard */; };
|
65ED4054235DEF6C0081F399 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 848363062262A3DD00DA1D35 /* Main.storyboard */; };
|
||||||
65ED4055235DEF6C0081F399 /* AccountsAdd.xib in Resources */ = {isa = PBXBuildFile; fileRef = 51EF0F8D2279C9260050506E /* AccountsAdd.xib */; };
|
65ED4055235DEF6C0081F399 /* AccountsAdd.xib in Resources */ = {isa = PBXBuildFile; fileRef = 51EF0F8D2279C9260050506E /* AccountsAdd.xib */; };
|
||||||
65ED4056235DEF6C0081F399 /* NetNewsWire.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 84C9FC8A22629E8F00D921D6 /* NetNewsWire.sdef */; };
|
65ED4056235DEF6C0081F399 /* NetNewsWire.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 84C9FC8A22629E8F00D921D6 /* NetNewsWire.sdef */; };
|
||||||
|
@ -615,14 +612,6 @@
|
||||||
84F9EAF4213660A100CF2DE4 /* testGenericScript.applescript in Sources */ = {isa = PBXBuildFile; fileRef = 84F9EAE1213660A100CF2DE4 /* testGenericScript.applescript */; };
|
84F9EAF4213660A100CF2DE4 /* testGenericScript.applescript in Sources */ = {isa = PBXBuildFile; fileRef = 84F9EAE1213660A100CF2DE4 /* testGenericScript.applescript */; };
|
||||||
84F9EAF5213660A100CF2DE4 /* establishMainWindowStartingState.applescript in Sources */ = {isa = PBXBuildFile; fileRef = 84F9EAE2213660A100CF2DE4 /* establishMainWindowStartingState.applescript */; };
|
84F9EAF5213660A100CF2DE4 /* establishMainWindowStartingState.applescript in Sources */ = {isa = PBXBuildFile; fileRef = 84F9EAE2213660A100CF2DE4 /* establishMainWindowStartingState.applescript */; };
|
||||||
84FF69B11FC3793300DC198E /* FaviconURLFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */; };
|
84FF69B11FC3793300DC198E /* FaviconURLFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */; };
|
||||||
9E7EFDA7237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7EFDA6237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift */; };
|
|
||||||
9E7EFDA8237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7EFDA6237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift */; };
|
|
||||||
9E7EFDC22375072300E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7EFDA6237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift */; };
|
|
||||||
9EA33BB92318F8C10097B644 /* AccountsFeedlyWebWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA33BB72318F8C10097B644 /* AccountsFeedlyWebWindowController.swift */; };
|
|
||||||
9EA33BBA2318F8C10097B644 /* AccountsFeedlyWeb.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9EA33BB82318F8C10097B644 /* AccountsFeedlyWeb.xib */; };
|
|
||||||
9EBD5B062374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EBD5B052374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift */; };
|
|
||||||
9EBD5B072374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EBD5B052374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift */; };
|
|
||||||
9EBD5B082374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EBD5B052374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift */; };
|
|
||||||
B528F81E23333C7E00E735DD /* page.html in Resources */ = {isa = PBXBuildFile; fileRef = B528F81D23333C7E00E735DD /* page.html */; };
|
B528F81E23333C7E00E735DD /* page.html in Resources */ = {isa = PBXBuildFile; fileRef = B528F81D23333C7E00E735DD /* page.html */; };
|
||||||
D553738B20186C20006D8857 /* Article+Scriptability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D553737C20186C1F006D8857 /* Article+Scriptability.swift */; };
|
D553738B20186C20006D8857 /* Article+Scriptability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D553737C20186C1F006D8857 /* Article+Scriptability.swift */; };
|
||||||
D57BE6E0204CD35F00D11AAC /* NSScriptCommand+NetNewsWire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D57BE6DF204CD35F00D11AAC /* NSScriptCommand+NetNewsWire.swift */; };
|
D57BE6E0204CD35F00D11AAC /* NSScriptCommand+NetNewsWire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D57BE6DF204CD35F00D11AAC /* NSScriptCommand+NetNewsWire.swift */; };
|
||||||
|
@ -1544,10 +1533,6 @@
|
||||||
84F9EAE2213660A100CF2DE4 /* establishMainWindowStartingState.applescript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.applescript; path = establishMainWindowStartingState.applescript; sourceTree = "<group>"; };
|
84F9EAE2213660A100CF2DE4 /* establishMainWindowStartingState.applescript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.applescript; path = establishMainWindowStartingState.applescript; sourceTree = "<group>"; };
|
||||||
84F9EAE4213660A100CF2DE4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
84F9EAE4213660A100CF2DE4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconURLFinder.swift; sourceTree = "<group>"; };
|
84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconURLFinder.swift; sourceTree = "<group>"; };
|
||||||
9E7EFDA6237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OAuthAuthorizationClient+NetNewsWire.swift"; sourceTree = "<group>"; };
|
|
||||||
9EA33BB72318F8C10097B644 /* AccountsFeedlyWebWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsFeedlyWebWindowController.swift; sourceTree = "<group>"; };
|
|
||||||
9EA33BB82318F8C10097B644 /* AccountsFeedlyWeb.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AccountsFeedlyWeb.xib; sourceTree = "<group>"; };
|
|
||||||
9EBD5B052374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthAccountAuthorizationOperation.swift; sourceTree = "<group>"; };
|
|
||||||
B24EFD482330FF99006C6242 /* NetNewsWire-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NetNewsWire-Bridging-Header.h"; sourceTree = "<group>"; };
|
B24EFD482330FF99006C6242 /* NetNewsWire-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NetNewsWire-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
B24EFD5923310109006C6242 /* WKPreferencesPrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKPreferencesPrivate.h; sourceTree = "<group>"; };
|
B24EFD5923310109006C6242 /* WKPreferencesPrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKPreferencesPrivate.h; sourceTree = "<group>"; };
|
||||||
B528F81D23333C7E00E735DD /* page.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = page.html; sourceTree = "<group>"; };
|
B528F81D23333C7E00E735DD /* page.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = page.html; sourceTree = "<group>"; };
|
||||||
|
@ -2449,8 +2434,6 @@
|
||||||
84C9FC6822629C9A00D921D6 /* Shared */ = {
|
84C9FC6822629C9A00D921D6 /* Shared */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
9E7EFDA6237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift */,
|
|
||||||
9EBD5B052374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift */,
|
|
||||||
846E77301F6EF5D600A165E2 /* Account.xcodeproj */,
|
846E77301F6EF5D600A165E2 /* Account.xcodeproj */,
|
||||||
841D4D542106B3D500DD04E6 /* Articles.xcodeproj */,
|
841D4D542106B3D500DD04E6 /* Articles.xcodeproj */,
|
||||||
841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */,
|
841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */,
|
||||||
|
@ -2520,8 +2503,6 @@
|
||||||
5144EA2E2279FAB600D19003 /* AccountsDetailViewController.swift */,
|
5144EA2E2279FAB600D19003 /* AccountsDetailViewController.swift */,
|
||||||
5144EA50227B8E4500D19003 /* AccountsFeedbin.xib */,
|
5144EA50227B8E4500D19003 /* AccountsFeedbin.xib */,
|
||||||
5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */,
|
5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */,
|
||||||
9EA33BB82318F8C10097B644 /* AccountsFeedlyWeb.xib */,
|
|
||||||
9EA33BB72318F8C10097B644 /* AccountsFeedlyWebWindowController.swift */,
|
|
||||||
55E15BC1229D65A900D6602A /* AccountsReaderAPI.xib */,
|
55E15BC1229D65A900D6602A /* AccountsReaderAPI.xib */,
|
||||||
55E15BCA229D65A900D6602A /* AccountsReaderAPIWindowController.swift */,
|
55E15BCA229D65A900D6602A /* AccountsReaderAPIWindowController.swift */,
|
||||||
5144EA352279FC3D00D19003 /* AccountsAddLocal.xib */,
|
5144EA352279FC3D00D19003 /* AccountsAddLocal.xib */,
|
||||||
|
@ -2808,9 +2789,8 @@
|
||||||
buildConfigurationList = 65ED407F235DEF6C0081F399 /* Build configuration list for PBXNativeTarget "NetNewsWire MAS" */;
|
buildConfigurationList = 65ED407F235DEF6C0081F399 /* Build configuration list for PBXNativeTarget "NetNewsWire MAS" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
65ED3FB5235DEF6C0081F399 /* Run Script: Update ArticleExtractorConfig.swift */,
|
65ED3FB5235DEF6C0081F399 /* Run Script: Update ArticleExtractorConfig.swift */,
|
||||||
9E7EFDC3237509DC00E94DF8 /* Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift */,
|
|
||||||
65ED3FB6235DEF6C0081F399 /* Sources */,
|
65ED3FB6235DEF6C0081F399 /* Sources */,
|
||||||
65ED4041235DEF6C0081F399 /* Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift */,
|
65ED4041235DEF6C0081F399 /* Run Script: Reset ArticleExtractorConfig.swift */,
|
||||||
65ED4042235DEF6C0081F399 /* Frameworks */,
|
65ED4042235DEF6C0081F399 /* Frameworks */,
|
||||||
65ED404D235DEF6C0081F399 /* Resources */,
|
65ED404D235DEF6C0081F399 /* Resources */,
|
||||||
65ED406F235DEF6C0081F399 /* Run Script: Automated build numbers */,
|
65ED406F235DEF6C0081F399 /* Run Script: Automated build numbers */,
|
||||||
|
@ -2859,9 +2839,8 @@
|
||||||
buildConfigurationList = 840D61A32029031E009BC708 /* Build configuration list for PBXNativeTarget "NetNewsWire-iOS" */;
|
buildConfigurationList = 840D61A32029031E009BC708 /* Build configuration list for PBXNativeTarget "NetNewsWire-iOS" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
517D2D80233A46ED00FF3E35 /* Run Script: Update ArticleExtractorConfig.swift */,
|
517D2D80233A46ED00FF3E35 /* Run Script: Update ArticleExtractorConfig.swift */,
|
||||||
9E7EFDC4237509F300E94DF8 /* Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift */,
|
|
||||||
840D61782029031C009BC708 /* Sources */,
|
840D61782029031C009BC708 /* Sources */,
|
||||||
517D2D81233A47AD00FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift */,
|
517D2D81233A47AD00FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift */,
|
||||||
840D61792029031C009BC708 /* Frameworks */,
|
840D61792029031C009BC708 /* Frameworks */,
|
||||||
840D617A2029031C009BC708 /* Resources */,
|
840D617A2029031C009BC708 /* Resources */,
|
||||||
51C451DF2264C7F200C03939 /* Embed Frameworks */,
|
51C451DF2264C7F200C03939 /* Embed Frameworks */,
|
||||||
|
@ -2883,9 +2862,8 @@
|
||||||
buildConfigurationList = 849C647A1ED37A5D003D8FC0 /* Build configuration list for PBXNativeTarget "NetNewsWire" */;
|
buildConfigurationList = 849C647A1ED37A5D003D8FC0 /* Build configuration list for PBXNativeTarget "NetNewsWire" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
51D6803823330CFF0097A009 /* Run Script: Update ArticleExtractorConfig.swift */,
|
51D6803823330CFF0097A009 /* Run Script: Update ArticleExtractorConfig.swift */,
|
||||||
9EBD5B092374CE3E008F3B58 /* Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift */,
|
|
||||||
849C645C1ED37A5D003D8FC0 /* Sources */,
|
849C645C1ED37A5D003D8FC0 /* Sources */,
|
||||||
517D2D82233A53D600FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift */,
|
517D2D82233A53D600FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift */,
|
||||||
849C645D1ED37A5D003D8FC0 /* Frameworks */,
|
849C645D1ED37A5D003D8FC0 /* Frameworks */,
|
||||||
849C645E1ED37A5D003D8FC0 /* Resources */,
|
849C645E1ED37A5D003D8FC0 /* Resources */,
|
||||||
84C987A52000AC9E0066B150 /* Run Script: Automated build numbers */,
|
84C987A52000AC9E0066B150 /* Run Script: Automated build numbers */,
|
||||||
|
@ -3372,7 +3350,6 @@
|
||||||
65ED4050235DEF6C0081F399 /* DetailKeyboardShortcuts.plist in Resources */,
|
65ED4050235DEF6C0081F399 /* DetailKeyboardShortcuts.plist in Resources */,
|
||||||
65ED4051235DEF6C0081F399 /* TimelineKeyboardShortcuts.plist in Resources */,
|
65ED4051235DEF6C0081F399 /* TimelineKeyboardShortcuts.plist in Resources */,
|
||||||
65ED4052235DEF6C0081F399 /* template.html in Resources */,
|
65ED4052235DEF6C0081F399 /* template.html in Resources */,
|
||||||
65ED4053235DEF6C0081F399 /* AccountsFeedlyWeb.xib in Resources */,
|
|
||||||
65ED4054235DEF6C0081F399 /* Main.storyboard in Resources */,
|
65ED4054235DEF6C0081F399 /* Main.storyboard in Resources */,
|
||||||
65ED4055235DEF6C0081F399 /* AccountsAdd.xib in Resources */,
|
65ED4055235DEF6C0081F399 /* AccountsAdd.xib in Resources */,
|
||||||
65ED4056235DEF6C0081F399 /* NetNewsWire.sdef in Resources */,
|
65ED4056235DEF6C0081F399 /* NetNewsWire.sdef in Resources */,
|
||||||
|
@ -3458,7 +3435,6 @@
|
||||||
5127B23A222B4849006D641D /* DetailKeyboardShortcuts.plist in Resources */,
|
5127B23A222B4849006D641D /* DetailKeyboardShortcuts.plist in Resources */,
|
||||||
845479881FEB77C000AD8B59 /* TimelineKeyboardShortcuts.plist in Resources */,
|
845479881FEB77C000AD8B59 /* TimelineKeyboardShortcuts.plist in Resources */,
|
||||||
848362FF2262A30E00DA1D35 /* template.html in Resources */,
|
848362FF2262A30E00DA1D35 /* template.html in Resources */,
|
||||||
9EA33BBA2318F8C10097B644 /* AccountsFeedlyWeb.xib in Resources */,
|
|
||||||
848363082262A3DD00DA1D35 /* Main.storyboard in Resources */,
|
848363082262A3DD00DA1D35 /* Main.storyboard in Resources */,
|
||||||
51EF0F8E2279C9260050506E /* AccountsAdd.xib in Resources */,
|
51EF0F8E2279C9260050506E /* AccountsAdd.xib in Resources */,
|
||||||
84C9FC8F22629E8F00D921D6 /* NetNewsWire.sdef in Resources */,
|
84C9FC8F22629E8F00D921D6 /* NetNewsWire.sdef in Resources */,
|
||||||
|
@ -3536,7 +3512,7 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "FAILED=false\n\nif [ -z \"${MERCURY_CLIENT_ID}\" ]; then\nFAILED=true\nfi\n\nif [ -z \"${MERCURY_CLIENT_SECRET}\" ]; then\nFAILED=true\nfi\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedbin Mercury credetials. ArticleExtractorConfig.swift not changed.\"\nexit 0\nfi\n\nsed -i .tmp \"s|{MERCURYID}|${MERCURY_CLIENT_ID}|g; s|{MERCURYSECRET}|${MERCURY_CLIENT_SECRET}|g\" \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n\nrm -f \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift.tmp\"\n\necho \"All env values found!\"\n";
|
shellScript = "FAILED=false\n\nif [ -z \"${MERCURY_CLIENT_ID}\" ]; then\nFAILED=true\nfi\n\nif [ -z \"${MERCURY_CLIENT_SECRET}\" ]; then\nFAILED=true\nfi\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedbin Mercury credetials. ArticleExtractorConfig.swift not changed.\"\nexit 0\nfi\n\nsed -i .tmp \"s|{MERCURYID}|${MERCURY_CLIENT_ID}|g; s|{MERCURYSECRET}|${MERCURY_CLIENT_SECRET}|g\" \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n\nrm -f \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift.tmp\"\n\necho \"All env values found!\"\n";
|
||||||
};
|
};
|
||||||
517D2D81233A47AD00FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift */ = {
|
517D2D81233A47AD00FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -3545,16 +3521,16 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
);
|
);
|
||||||
name = "Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift";
|
name = "Run Script: Reset ArticleExtractorConfig.swift";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
);
|
);
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "git checkout \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\ngit checkout \"${SRCROOT}/Shared/OAuthAuthorizationClient+NetNewsWire.swift\"\n";
|
shellScript = "git checkout \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n";
|
||||||
};
|
};
|
||||||
517D2D82233A53D600FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift */ = {
|
517D2D82233A53D600FF3E35 /* Run Script: Reset ArticleExtractorConfig.swift */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -3563,14 +3539,14 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
);
|
);
|
||||||
name = "Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift";
|
name = "Run Script: Reset ArticleExtractorConfig.swift";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
);
|
);
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "git checkout \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\ngit checkout \"${SRCROOT}/Shared/OAuthAuthorizationClient+NetNewsWire.swift\"\n";
|
shellScript = "git checkout \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n";
|
||||||
};
|
};
|
||||||
51D6803823330CFF0097A009 /* Run Script: Update ArticleExtractorConfig.swift */ = {
|
51D6803823330CFF0097A009 /* Run Script: Update ArticleExtractorConfig.swift */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
@ -3608,7 +3584,7 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "FAILED=false\n\nif [ -z \"${MERCURY_CLIENT_ID}\" ]; then\nFAILED=true\nfi\n\nif [ -z \"${MERCURY_CLIENT_SECRET}\" ]; then\nFAILED=true\nfi\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedbin Mercury credetials. ArticleExtractorConfig.swift not changed.\"\nexit 0\nfi\n\nsed -i .tmp \"s|{MERCURYID}|${MERCURY_CLIENT_ID}|g; s|{MERCURYSECRET}|${MERCURY_CLIENT_SECRET}|g\" \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n\nrm -f \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift.tmp\"\n\necho \"All env values found!\"\n\n";
|
shellScript = "FAILED=false\n\nif [ -z \"${MERCURY_CLIENT_ID}\" ]; then\nFAILED=true\nfi\n\nif [ -z \"${MERCURY_CLIENT_SECRET}\" ]; then\nFAILED=true\nfi\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedbin Mercury credetials. ArticleExtractorConfig.swift not changed.\"\nexit 0\nfi\n\nsed -i .tmp \"s|{MERCURYID}|${MERCURY_CLIENT_ID}|g; s|{MERCURYSECRET}|${MERCURY_CLIENT_SECRET}|g\" \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n\nrm -f \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift.tmp\"\n\necho \"All env values found!\"\n\n";
|
||||||
};
|
};
|
||||||
65ED4041235DEF6C0081F399 /* Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift */ = {
|
65ED4041235DEF6C0081F399 /* Run Script: Reset ArticleExtractorConfig.swift */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -3617,14 +3593,14 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
);
|
);
|
||||||
name = "Run Script: Reset ArticleExtractorConfig.swift and OAuthAuthorizationClient+NetNewsWire.swift";
|
name = "Run Script: Reset ArticleExtractorConfig.swift";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
);
|
);
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "git checkout \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\ngit checkout \"${SRCROOT}/Shared/OAuthAuthorizationClient+NetNewsWire.swift\"\n";
|
shellScript = "git checkout \"${SRCROOT}/Shared/Article Extractor/ArticleExtractorConfig.swift\"\n";
|
||||||
};
|
};
|
||||||
65ED406F235DEF6C0081F399 /* Run Script: Automated build numbers */ = {
|
65ED406F235DEF6C0081F399 /* Run Script: Automated build numbers */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
@ -3690,60 +3666,6 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "# See https://blog.curtisherbert.com/automated-build-numbers/\n\n# WARNING: If automated build numbers are restored then take \n# care to ensure any app extensions are versioned the same as the app.\n# ask Daniel (jalkut@red-sweater.com) if in doubt about this. \n#git=`sh /etc/profile; which git`\n#branch_name=`$git symbolic-ref HEAD | sed -e 's,.*/\\\\(.*\\\\),\\\\1,'`\n#git_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n#simple_branch_name=`$git rev-parse --abbrev-ref HEAD`\n\n#build_number=\"$git_count\"\n#if [ $CONFIGURATION != \"Release\" ]; then\n#build_number+=\"-$simple_branch_name\"\n#fi\n\n#plist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\n#dsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n#/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\n#if [ -f \"$DSYM_INFO_PLIST\" ] ; then\n#/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\n#fi\n";
|
shellScript = "# See https://blog.curtisherbert.com/automated-build-numbers/\n\n# WARNING: If automated build numbers are restored then take \n# care to ensure any app extensions are versioned the same as the app.\n# ask Daniel (jalkut@red-sweater.com) if in doubt about this. \n#git=`sh /etc/profile; which git`\n#branch_name=`$git symbolic-ref HEAD | sed -e 's,.*/\\\\(.*\\\\),\\\\1,'`\n#git_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n#simple_branch_name=`$git rev-parse --abbrev-ref HEAD`\n\n#build_number=\"$git_count\"\n#if [ $CONFIGURATION != \"Release\" ]; then\n#build_number+=\"-$simple_branch_name\"\n#fi\n\n#plist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\n#dsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n#/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\n#if [ -f \"$DSYM_INFO_PLIST\" ] ; then\n#/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\n#fi\n";
|
||||||
};
|
};
|
||||||
9E7EFDC3237509DC00E94DF8 /* Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift";
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "FAILED=false\n\nif [ -z \"${FEEDLY_CLIENT_ID}\" ]; then\necho \"Missing Feedly Client ID\"\nFAILED=true\nfi\n\nif [ -z \"${FEEDLY_CLIENT_SECRET}\" ]; then\necho \"Missing Feedly Client Secret\"\nFAILED=true\nfi\n\nFEEDLY_CLIENT_SOURCE=\"${SRCROOT}/Shared/OAuthAuthorizationClient+NetNewsWire.swift\"\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedly client ID or secret. ${FEEDLY_CLIENT_SOURCE} not changed.\"\nexit 0\nfi\n\n# echo \"Substituting variables in: ${FEEDLY_CLIENT_SOURCE}\"\n\nif [ -e \"${FEEDLY_CLIENT_SOURCE}\" ]\nthen\n sed -i .tmp \"s|{FEEDLY_CLIENT_ID}|${FEEDLY_CLIENT_ID}|g; s|{FEEDLY_CLIENT_SECRET}|${FEEDLY_CLIENT_SECRET}|g\" $FEEDLY_CLIENT_SOURCE\n # echo \"`git diff ${FEEDLY_CLIENT_SOURCE}`\"\n rm -f \"${FEEDLY_CLIENT_SOURCE}.tmp\"\nelse\n echo \"File does not exist at ${FEEDLY_CLIENT_SOURCE}. Has it been moved or renamed?\"\n exit -1\nfi\n\necho \"All env values found!\"\n";
|
|
||||||
};
|
|
||||||
9E7EFDC4237509F300E94DF8 /* Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift";
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "FAILED=false\n\nif [ -z \"${FEEDLY_CLIENT_ID}\" ]; then\necho \"Missing Feedly Client ID\"\nFAILED=true\nfi\n\nif [ -z \"${FEEDLY_CLIENT_SECRET}\" ]; then\necho \"Missing Feedly Client Secret\"\nFAILED=true\nfi\n\nFEEDLY_CLIENT_SOURCE=\"${SRCROOT}/Shared/OAuthAuthorizationClient+NetNewsWire.swift\"\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedly client ID or secret. ${FEEDLY_CLIENT_SOURCE} not changed.\"\nexit 0\nfi\n\n# echo \"Substituting variables in: ${FEEDLY_CLIENT_SOURCE}\"\n\nif [ -e \"${FEEDLY_CLIENT_SOURCE}\" ]\nthen\n sed -i .tmp \"s|{FEEDLY_CLIENT_ID}|${FEEDLY_CLIENT_ID}|g; s|{FEEDLY_CLIENT_SECRET}|${FEEDLY_CLIENT_SECRET}|g\" $FEEDLY_CLIENT_SOURCE\n # echo \"`git diff ${FEEDLY_CLIENT_SOURCE}`\"\n rm -f \"${FEEDLY_CLIENT_SOURCE}.tmp\"\nelse\n echo \"File does not exist at ${FEEDLY_CLIENT_SOURCE}. Has it been moved or renamed?\"\n exit -1\nfi\n\necho \"All env values found!\"\n";
|
|
||||||
};
|
|
||||||
9EBD5B092374CE3E008F3B58 /* Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Run Script: Update OAuthAuthorizationClient+NetNewsWire.swift";
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "FAILED=false\n\nif [ -z \"${FEEDLY_CLIENT_ID}\" ]; then\necho \"Missing Feedly Client ID\"\nFAILED=true\nfi\n\nif [ -z \"${FEEDLY_CLIENT_SECRET}\" ]; then\necho \"Missing Feedly Client Secret\"\nFAILED=true\nfi\n\nFEEDLY_CLIENT_SOURCE=\"${SRCROOT}/Shared/OAuthAuthorizationClient+NetNewsWire.swift\"\n\nif [ \"$FAILED\" = true ]; then\necho \"Missing Feedly client ID or secret. ${FEEDLY_CLIENT_SOURCE} not changed.\"\nexit 0\nfi\n\n# echo \"Substituting variables in: ${FEEDLY_CLIENT_SOURCE}\"\n\nif [ -e \"${FEEDLY_CLIENT_SOURCE}\" ]\nthen\n sed -i .tmp \"s|{FEEDLY_CLIENT_ID}|${FEEDLY_CLIENT_ID}|g; s|{FEEDLY_CLIENT_SECRET}|${FEEDLY_CLIENT_SECRET}|g\" $FEEDLY_CLIENT_SOURCE\n # echo \"`git diff ${FEEDLY_CLIENT_SOURCE}`\"\n rm -f \"${FEEDLY_CLIENT_SOURCE}.tmp\"\nelse\n echo \"File does not exist at ${FEEDLY_CLIENT_SOURCE}. Has it been moved or renamed?\"\n exit -1\nfi\n\necho \"All env values found!\"\n";
|
|
||||||
};
|
|
||||||
D519E77022EE5B4100923F27 /* Run Script: Verify No Build Settings */ = {
|
D519E77022EE5B4100923F27 /* Run Script: Verify No Build Settings */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
@ -3829,7 +3751,6 @@
|
||||||
65ED3FC9235DEF6C0081F399 /* SmartFeedPasteboardWriter.swift in Sources */,
|
65ED3FC9235DEF6C0081F399 /* SmartFeedPasteboardWriter.swift in Sources */,
|
||||||
65ED3FCA235DEF6C0081F399 /* SmartFeedsController.swift in Sources */,
|
65ED3FCA235DEF6C0081F399 /* SmartFeedsController.swift in Sources */,
|
||||||
65ED3FCB235DEF6C0081F399 /* SidebarViewController.swift in Sources */,
|
65ED3FCB235DEF6C0081F399 /* SidebarViewController.swift in Sources */,
|
||||||
65ED3FCC235DEF6C0081F399 /* AccountsFeedlyWebWindowController.swift in Sources */,
|
|
||||||
65ED3FCD235DEF6C0081F399 /* SidebarOutlineView.swift in Sources */,
|
65ED3FCD235DEF6C0081F399 /* SidebarOutlineView.swift in Sources */,
|
||||||
65ED3FCE235DEF6C0081F399 /* DetailKeyboardDelegate.swift in Sources */,
|
65ED3FCE235DEF6C0081F399 /* DetailKeyboardDelegate.swift in Sources */,
|
||||||
65ED3FCF235DEF6C0081F399 /* TimelineContainerView.swift in Sources */,
|
65ED3FCF235DEF6C0081F399 /* TimelineContainerView.swift in Sources */,
|
||||||
|
@ -3860,7 +3781,6 @@
|
||||||
65ED3FE8235DEF6C0081F399 /* ArticleStyle.swift in Sources */,
|
65ED3FE8235DEF6C0081F399 /* ArticleStyle.swift in Sources */,
|
||||||
65ED3FE9235DEF6C0081F399 /* FaviconURLFinder.swift in Sources */,
|
65ED3FE9235DEF6C0081F399 /* FaviconURLFinder.swift in Sources */,
|
||||||
65ED3FEA235DEF6C0081F399 /* SidebarViewController+ContextualMenus.swift in Sources */,
|
65ED3FEA235DEF6C0081F399 /* SidebarViewController+ContextualMenus.swift in Sources */,
|
||||||
65ED3FEB235DEF6C0081F399 /* (null) in Sources */,
|
|
||||||
65ED3FEC235DEF6C0081F399 /* RSHTMLMetadata+Extension.swift in Sources */,
|
65ED3FEC235DEF6C0081F399 /* RSHTMLMetadata+Extension.swift in Sources */,
|
||||||
65ED3FED235DEF6C0081F399 /* SendToMarsEditCommand.swift in Sources */,
|
65ED3FED235DEF6C0081F399 /* SendToMarsEditCommand.swift in Sources */,
|
||||||
65ED3FEE235DEF6C0081F399 /* UserNotificationManager.swift in Sources */,
|
65ED3FEE235DEF6C0081F399 /* UserNotificationManager.swift in Sources */,
|
||||||
|
@ -3896,7 +3816,6 @@
|
||||||
65ED400C235DEF6C0081F399 /* FolderInspectorViewController.swift in Sources */,
|
65ED400C235DEF6C0081F399 /* FolderInspectorViewController.swift in Sources */,
|
||||||
65ED400D235DEF6C0081F399 /* SmartFeedDelegate.swift in Sources */,
|
65ED400D235DEF6C0081F399 /* SmartFeedDelegate.swift in Sources */,
|
||||||
65ED400E235DEF6C0081F399 /* ImageDownloader.swift in Sources */,
|
65ED400E235DEF6C0081F399 /* ImageDownloader.swift in Sources */,
|
||||||
9E7EFDA8237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift in Sources */,
|
|
||||||
65ED400F235DEF6C0081F399 /* ArticleExtractorButton.swift in Sources */,
|
65ED400F235DEF6C0081F399 /* ArticleExtractorButton.swift in Sources */,
|
||||||
65ED4010235DEF6C0081F399 /* AccountsAddTableCellView.swift in Sources */,
|
65ED4010235DEF6C0081F399 /* AccountsAddTableCellView.swift in Sources */,
|
||||||
65ED4011235DEF6C0081F399 /* AddFolderWindowController.swift in Sources */,
|
65ED4011235DEF6C0081F399 /* AddFolderWindowController.swift in Sources */,
|
||||||
|
@ -3927,7 +3846,6 @@
|
||||||
65ED402A235DEF6C0081F399 /* AddFeedWindowController.swift in Sources */,
|
65ED402A235DEF6C0081F399 /* AddFeedWindowController.swift in Sources */,
|
||||||
65ED402B235DEF6C0081F399 /* ImportOPMLWindowController.swift in Sources */,
|
65ED402B235DEF6C0081F399 /* ImportOPMLWindowController.swift in Sources */,
|
||||||
65ED402C235DEF6C0081F399 /* TimelineTableView.swift in Sources */,
|
65ED402C235DEF6C0081F399 /* TimelineTableView.swift in Sources */,
|
||||||
9EBD5B072374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift in Sources */,
|
|
||||||
65ED402D235DEF6C0081F399 /* DetailStatusBarView.swift in Sources */,
|
65ED402D235DEF6C0081F399 /* DetailStatusBarView.swift in Sources */,
|
||||||
65ED402E235DEF6C0081F399 /* MainWindowController+Scriptability.swift in Sources */,
|
65ED402E235DEF6C0081F399 /* MainWindowController+Scriptability.swift in Sources */,
|
||||||
65ED402F235DEF6C0081F399 /* PreferencesWindowController.swift in Sources */,
|
65ED402F235DEF6C0081F399 /* PreferencesWindowController.swift in Sources */,
|
||||||
|
@ -3997,7 +3915,6 @@
|
||||||
51314704235C41FC00387FDC /* Intents.intentdefinition in Sources */,
|
51314704235C41FC00387FDC /* Intents.intentdefinition in Sources */,
|
||||||
FF3ABF162325AF5D0074C542 /* ArticleSorter.swift in Sources */,
|
FF3ABF162325AF5D0074C542 /* ArticleSorter.swift in Sources */,
|
||||||
51C4525C226508DF00C03939 /* String-Extensions.swift in Sources */,
|
51C4525C226508DF00C03939 /* String-Extensions.swift in Sources */,
|
||||||
9E7EFDC22375072300E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift in Sources */,
|
|
||||||
51C452792265091600C03939 /* MasterTimelineTableViewCell.swift in Sources */,
|
51C452792265091600C03939 /* MasterTimelineTableViewCell.swift in Sources */,
|
||||||
51FA73AB2332C2FD0090D516 /* ArticleExtractorConfig.swift in Sources */,
|
51FA73AB2332C2FD0090D516 /* ArticleExtractorConfig.swift in Sources */,
|
||||||
51C452852265093600C03939 /* FlattenedAccountFolderPickerData.swift in Sources */,
|
51C452852265093600C03939 /* FlattenedAccountFolderPickerData.swift in Sources */,
|
||||||
|
@ -4032,7 +3949,6 @@
|
||||||
51C4527F2265092C00C03939 /* ArticleViewController.swift in Sources */,
|
51C4527F2265092C00C03939 /* ArticleViewController.swift in Sources */,
|
||||||
51C4526A226508F600C03939 /* MasterFeedTableViewCellLayout.swift in Sources */,
|
51C4526A226508F600C03939 /* MasterFeedTableViewCellLayout.swift in Sources */,
|
||||||
51C452AE2265104D00C03939 /* ArticleStringFormatter.swift in Sources */,
|
51C452AE2265104D00C03939 /* ArticleStringFormatter.swift in Sources */,
|
||||||
9EBD5B082374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift in Sources */,
|
|
||||||
512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */,
|
512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */,
|
||||||
51C4529922650A0000C03939 /* ArticleStylesManager.swift in Sources */,
|
51C4529922650A0000C03939 /* ArticleStylesManager.swift in Sources */,
|
||||||
51EF0F802277A8330050506E /* MasterTimelineCellLayout.swift in Sources */,
|
51EF0F802277A8330050506E /* MasterTimelineCellLayout.swift in Sources */,
|
||||||
|
@ -4124,7 +4040,6 @@
|
||||||
849C78922362AB04009A71E4 /* ExportOPMLWindowController.swift in Sources */,
|
849C78922362AB04009A71E4 /* ExportOPMLWindowController.swift in Sources */,
|
||||||
84CC88181FE59CBF00644329 /* SmartFeedsController.swift in Sources */,
|
84CC88181FE59CBF00644329 /* SmartFeedsController.swift in Sources */,
|
||||||
849A97661ED9EB96007D329B /* SidebarViewController.swift in Sources */,
|
849A97661ED9EB96007D329B /* SidebarViewController.swift in Sources */,
|
||||||
9EA33BB92318F8C10097B644 /* AccountsFeedlyWebWindowController.swift in Sources */,
|
|
||||||
849A97641ED9EB96007D329B /* SidebarOutlineView.swift in Sources */,
|
849A97641ED9EB96007D329B /* SidebarOutlineView.swift in Sources */,
|
||||||
5127B238222B4849006D641D /* DetailKeyboardDelegate.swift in Sources */,
|
5127B238222B4849006D641D /* DetailKeyboardDelegate.swift in Sources */,
|
||||||
8405DD9922153B6B008CE1BF /* TimelineContainerView.swift in Sources */,
|
8405DD9922153B6B008CE1BF /* TimelineContainerView.swift in Sources */,
|
||||||
|
@ -4135,13 +4050,11 @@
|
||||||
D553738B20186C20006D8857 /* Article+Scriptability.swift in Sources */,
|
D553738B20186C20006D8857 /* Article+Scriptability.swift in Sources */,
|
||||||
845EE7C11FC2488C00854A1F /* SmartFeed.swift in Sources */,
|
845EE7C11FC2488C00854A1F /* SmartFeed.swift in Sources */,
|
||||||
84702AA41FA27AC0006B8943 /* MarkStatusCommand.swift in Sources */,
|
84702AA41FA27AC0006B8943 /* MarkStatusCommand.swift in Sources */,
|
||||||
9E7EFDA7237502C000E94DF8 /* OAuthAuthorizationClient+NetNewsWire.swift in Sources */,
|
|
||||||
D5907D7F2004AC00005947E5 /* NSApplication+Scriptability.swift in Sources */,
|
D5907D7F2004AC00005947E5 /* NSApplication+Scriptability.swift in Sources */,
|
||||||
8405DD9C22153BD7008CE1BF /* NSView-Extensions.swift in Sources */,
|
8405DD9C22153BD7008CE1BF /* NSView-Extensions.swift in Sources */,
|
||||||
849A979F1ED9F130007D329B /* SidebarCell.swift in Sources */,
|
849A979F1ED9F130007D329B /* SidebarCell.swift in Sources */,
|
||||||
51E595A5228CC36500FCC42B /* ArticleStatusSyncTimer.swift in Sources */,
|
51E595A5228CC36500FCC42B /* ArticleStatusSyncTimer.swift in Sources */,
|
||||||
849A97651ED9EB96007D329B /* FeedTreeControllerDelegate.swift in Sources */,
|
849A97651ED9EB96007D329B /* FeedTreeControllerDelegate.swift in Sources */,
|
||||||
9EBD5B062374BD68008F3B58 /* OAuthAccountAuthorizationOperation.swift in Sources */,
|
|
||||||
849A97671ED9EB96007D329B /* UnreadCountView.swift in Sources */,
|
849A97671ED9EB96007D329B /* UnreadCountView.swift in Sources */,
|
||||||
51FE10092346739D0056195D /* ActivityType.swift in Sources */,
|
51FE10092346739D0056195D /* ActivityType.swift in Sources */,
|
||||||
840BEE4121D70E64009BBAFA /* CrashReportWindowController.swift in Sources */,
|
840BEE4121D70E64009BBAFA /* CrashReportWindowController.swift in Sources */,
|
||||||
|
|
Loading…
Reference in New Issue