Delete RSCoreObjC.

This commit is contained in:
Brent Simmons 2024-11-15 20:45:45 -08:00
parent 4aaee795f9
commit 357ea22da4
13 changed files with 257 additions and 259 deletions

View File

@ -5,10 +5,7 @@
// Created by Brent Simmons on 11/3/24.
//
#if TARGET_OS_OSX
@import AppKit;
#import <TargetConditionals.h>
@interface NSSharingService (NoDeprecationWarning)
@ -24,5 +21,3 @@
+ (NSArray *)sharingServicesForItems_noDeprecationWarning:(NSArray *)items;
@end
#endif

View File

@ -1,15 +1,11 @@
//
// NSSharingService+RSCore.m
// NSSharingService+Extension.m
// RSCore
//
// Created by Brent Simmons on 11/3/24.
//
#import <TargetConditionals.h>
#if TARGET_OS_OSX
#import "NSSharingService+RSCore.h"
#import "NSSharingService+Extension.h"
@implementation NSSharingService (NoDeprecationWarning)
@ -24,5 +20,3 @@
}
@end
#endif

View File

@ -8,7 +8,6 @@
import AppKit
import RSCore
import RSCoreObjC
import Articles
import Account

View File

@ -7,3 +7,4 @@
//
#import "WKPreferencesPrivate.h"
#import "NSSharingService+Extension.h"

View File

@ -59,17 +59,11 @@
840D617F2029031C009BC708 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D617E2029031C009BC708 /* AppDelegate.swift */; };
8413876D2CD8970B00E8490F /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 8413876C2CD8970B00E8490F /* RSCore */; };
8413876E2CD8970B00E8490F /* RSCore in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 8413876C2CD8970B00E8490F /* RSCore */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
841387702CD8970B00E8490F /* RSCoreObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 8413876F2CD8970B00E8490F /* RSCoreObjC */; };
841387712CD8970B00E8490F /* RSCoreObjC in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 8413876F2CD8970B00E8490F /* RSCoreObjC */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
841387732CD8970B00E8490F /* RSCoreResources in Frameworks */ = {isa = PBXBuildFile; productRef = 841387722CD8970B00E8490F /* RSCoreResources */; };
841387752CD897C500E8490F /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 841387742CD897C500E8490F /* RSCore */; };
841387762CD897C500E8490F /* RSCore in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 841387742CD897C500E8490F /* RSCore */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
841387782CD897C500E8490F /* RSCoreObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 841387772CD897C500E8490F /* RSCoreObjC */; };
841387792CD897C500E8490F /* RSCoreObjC in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 841387772CD897C500E8490F /* RSCoreObjC */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
8413877B2CD897CF00E8490F /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 8413877A2CD897CF00E8490F /* RSCore */; };
8413877E2CD897CF00E8490F /* RSCoreObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 8413877D2CD897CF00E8490F /* RSCoreObjC */; };
841387812CD897EF00E8490F /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 841387802CD897EF00E8490F /* RSCore */; };
841387842CD897EF00E8490F /* RSCoreObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 841387832CD897EF00E8490F /* RSCoreObjC */; };
841387872CD89E5200E8490F /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 841387862CD89E5200E8490F /* RSCore */; };
8413878E2CDC790C00E8490F /* RSWeb in Frameworks */ = {isa = PBXBuildFile; productRef = 8413878D2CDC790C00E8490F /* RSWeb */; };
8413878F2CDC790C00E8490F /* RSWeb in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 8413878D2CDC790C00E8490F /* RSWeb */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
@ -225,7 +219,6 @@
513F327B2593EE6F0003048F /* SyncDatabase in Embed Frameworks */,
513F32722593EE6F0003048F /* Articles in Embed Frameworks */,
513F32812593EF180003048F /* Account in Embed Frameworks */,
841387792CD897C500E8490F /* RSCoreObjC in Embed Frameworks */,
513F32752593EE6F0003048F /* ArticlesDatabase in Embed Frameworks */,
);
name = "Embed Frameworks";
@ -269,7 +262,6 @@
513277662590FC780064F1E7 /* Secrets in Embed Frameworks */,
513277652590FC640064F1E7 /* SyncDatabase in Embed Frameworks */,
513277622590FC640064F1E7 /* ArticlesDatabase in Embed Frameworks */,
841387712CD8970B00E8490F /* RSCoreObjC in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@ -570,7 +562,6 @@
buildActionMask = 2147483647;
files = (
841387812CD897EF00E8490F /* RSCore in Frameworks */,
841387842CD897EF00E8490F /* RSCoreObjC in Frameworks */,
511B148924E5DBDD00C919BD /* Account in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -590,7 +581,6 @@
files = (
51BC2F3824D3439A00E90810 /* Account in Frameworks */,
8413877B2CD897CF00E8490F /* RSCore in Frameworks */,
8413877E2CD897CF00E8490F /* RSCoreObjC in Frameworks */,
84C1EB4A2CDFE0D200C7456A /* RSTree in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -619,7 +609,6 @@
516B695F24D2F33B00B5702F /* Account in Frameworks */,
847C4C112CDF2310008BF5FE /* RSTree in Frameworks */,
8417FA432CDF2E56005F989B /* RSDatabase in Frameworks */,
841387782CD897C500E8490F /* RSCoreObjC in Frameworks */,
513F32712593EE6F0003048F /* Articles in Frameworks */,
513F32772593EE6F0003048F /* Secrets in Frameworks */,
841387912CDC791B00E8490F /* RSWeb in Frameworks */,
@ -642,7 +631,6 @@
841387732CD8970B00E8490F /* RSCoreResources in Frameworks */,
8413878E2CDC790C00E8490F /* RSWeb in Frameworks */,
179C39EA26F76B0500D4E741 /* Zip in Frameworks */,
841387702CD8970B00E8490F /* RSCoreObjC in Frameworks */,
847C4C0E2CDF2301008BF5FE /* RSTree in Frameworks */,
8413876D2CD8970B00E8490F /* RSCore in Frameworks */,
514C16CE24D2E63F009A3AFA /* Account in Frameworks */,
@ -791,7 +779,6 @@
packageProductDependencies = (
511B148824E5DBDD00C919BD /* Account */,
841387802CD897EF00E8490F /* RSCore */,
841387832CD897EF00E8490F /* RSCoreObjC */,
);
productName = ShareExtension;
productReference = 510C415C24E5CDE3008226FD /* NetNewsWire Share Extension.appex */;
@ -839,7 +826,6 @@
packageProductDependencies = (
51BC2F3724D3439A00E90810 /* Account */,
8413877A2CD897CF00E8490F /* RSCore */,
8413877D2CD897CF00E8490F /* RSCoreObjC */,
84C1EB492CDFE0D200C7456A /* RSTree */,
);
productName = "NetNewsWire iOS Share Extension";
@ -921,7 +907,6 @@
513F32792593EE6F0003048F /* SyncDatabase */,
179D280A26F6F93D003B2E0A /* Zip */,
841387742CD897C500E8490F /* RSCore */,
841387772CD897C500E8490F /* RSCoreObjC */,
841387902CDC791B00E8490F /* RSWeb */,
847C4C102CDF2310008BF5FE /* RSTree */,
8417FA422CDF2E56005F989B /* RSDatabase */,
@ -967,7 +952,6 @@
513277632590FC640064F1E7 /* SyncDatabase */,
179C39E926F76B0500D4E741 /* Zip */,
8413876C2CD8970B00E8490F /* RSCore */,
8413876F2CD8970B00E8490F /* RSCoreObjC */,
841387722CD8970B00E8490F /* RSCoreResources */,
8413878D2CDC790C00E8490F /* RSWeb */,
847C4C0D2CDF2301008BF5FE /* RSTree */,
@ -1821,10 +1805,6 @@
isa = XCSwiftPackageProductDependency;
productName = RSCore;
};
8413876F2CD8970B00E8490F /* RSCoreObjC */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCoreObjC;
};
841387722CD8970B00E8490F /* RSCoreResources */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCoreResources;
@ -1833,26 +1813,14 @@
isa = XCSwiftPackageProductDependency;
productName = RSCore;
};
841387772CD897C500E8490F /* RSCoreObjC */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCoreObjC;
};
8413877A2CD897CF00E8490F /* RSCore */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCore;
};
8413877D2CD897CF00E8490F /* RSCoreObjC */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCoreObjC;
};
841387802CD897EF00E8490F /* RSCore */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCore;
};
841387832CD897EF00E8490F /* RSCoreObjC */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCoreObjC;
};
841387862CD89E5200E8490F /* RSCore */ = {
isa = XCSwiftPackageProductDependency;
productName = RSCore;

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSCore"
BuildableName = "RSCore"
BlueprintName = "RSCore"
ReferencedContainer = "container:">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSCore"
BuildableName = "RSCore"
BlueprintName = "RSCore"
ReferencedContainer = "container:">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSCoreTests"
BuildableName = "RSCoreTests"
BlueprintName = "RSCoreTests"
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -7,22 +7,13 @@ let package = Package(
platforms: [.macOS(.v14), .iOS(.v17)],
products: [
.library(name: "RSCore", type: .dynamic, targets: ["RSCore"]),
.library(name: "RSCoreObjC", type: .dynamic, targets: ["RSCoreObjC"]),
.library(name: "RSCoreResources", type: .static, targets: ["RSCoreResources"])
],
targets: [
.target(
name: "RSCore",
dependencies: ["RSCoreObjC"],
swiftSettings: [.unsafeFlags(["-warnings-as-errors"])]
),
.target(
name: "RSCoreObjC",
dependencies: [],
cSettings: [
.headerSearchPath("include")
]
),
.target(
name: "RSCoreResources",
resources: [

View File

@ -1,37 +0,0 @@
//
// NSData+RSCore.h
// RSCore
//
// Created by Brent Simmons on 3/25/15.
// Copyright (c) 2015 Ranchero Software, LLC. All rights reserved.
//
@import Foundation;
BOOL RSEqualBytes(const void *bytes1, const void *bytes2, size_t length);
NSString *RSHexadecimalStringWithBytes(const unsigned char *bytes, NSUInteger numberOfBytes);
@interface NSData (RSCore)
- (NSData *)rs_md5Hash;
- (NSString *)rs_md5HashString;
- (BOOL)rs_dataIsPNG;
- (BOOL)rs_dataIsGIF;
- (BOOL)rs_dataIsJPEG;
- (BOOL)rs_dataIsImage;
- (BOOL)rs_dataIsProbablyHTML;
- (BOOL)rs_dataBeginsWithBytes:(const void *)bytes length:(size_t)numberOfBytes;
- (NSString *)rs_noCopyString; //This data object must out-live returned string. May return nil.
/*If bytes are deadbeef, then string is @"deadbeef". Returns nil for empty data.*/
- (NSString *)rs_hexadecimalString;
@end

View File

@ -1,156 +0,0 @@
//
// NSData+RSCore.m
// RSCore
//
// Created by Brent Simmons on 3/25/15.
// Copyright (c) 2015 Ranchero Software, LLC. All rights reserved.
//
#import <CommonCrypto/CommonDigest.h>
#import "NSData+RSCore.h"
@implementation NSData (RSCore)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- (NSData *)rs_md5Hash {
unsigned char hash[CC_MD5_DIGEST_LENGTH];
CC_MD5([self bytes], (CC_LONG)[self length], hash);
return [NSData dataWithBytes:(const void *)hash length:CC_MD5_DIGEST_LENGTH];
}
#pragma GCC diagnostic pop
- (NSString *)rs_md5HashString {
NSData *d = [self rs_md5Hash];
return [d rs_hexadecimalString];
}
BOOL RSEqualBytes(const void *bytes1, const void *bytes2, size_t length) {
return memcmp(bytes1, bytes2, length) == 0;
}
- (BOOL)rs_dataBeginsWithBytes:(const void *)bytes length:(size_t)numberOfBytes {
if ([self length] < numberOfBytes) {
return NO;
}
return RSEqualBytes([self bytes], bytes, numberOfBytes);
}
- (BOOL)rs_dataIsPNG {
/* http://www.w3.org/TR/PNG/#5PNG-file-signature : "The first eight bytes of a PNG datastream always contain the following (decimal) values: 137 80 78 71 13 10 26 10" */
static const Byte pngHeader[] = {137, 'P', 'N', 'G', 13, 10, 26, 10};
return [self rs_dataBeginsWithBytes:pngHeader length:sizeof(pngHeader)];
}
- (BOOL)rs_dataIsGIF {
/* http://www.onicos.com/staff/iz/formats/gif.html */
static const Byte gifHeader1[] = {'G', 'I', 'F', '8', '7', 'a'};
if ([self rs_dataBeginsWithBytes:gifHeader1 length:sizeof(gifHeader1)]) {
return YES;
}
static const Byte gifHeader2[] = {'G', 'I', 'F', '8', '9', 'a'};
return [self rs_dataBeginsWithBytes:gifHeader2 length:sizeof(gifHeader2)];
}
- (BOOL)rs_dataIsJPEG {
const void *bytes = [self bytes];
static const Byte jpegHeader1[] = {'J', 'F', 'I', 'F'};
if (RSEqualBytes(bytes + 6, jpegHeader1, sizeof(jpegHeader1))) {
return YES;
}
static const Byte jpegHeader2[] = {'E', 'x', 'i', 'f'};
return RSEqualBytes(bytes + 6, jpegHeader2, sizeof(jpegHeader2));
}
- (BOOL)rs_dataIsImage {
return [self rs_dataIsPNG] || [self rs_dataIsJPEG] || [self rs_dataIsGIF];
}
- (BOOL)rs_dataIsProbablyHTML {
NSString *s = [self rs_noCopyString];
if (!s) {
return NO;
}
if (![s containsString:@">"] || ![s containsString:@">"]) {
return NO;
}
for (NSString *oneString in @[@"html", @"body"]) {
NSRange range = [s rangeOfString:oneString options:NSCaseInsensitiveSearch];
if (range.location == NSNotFound) {
return NO;
}
}
return YES;
}
- (NSString *)rs_noCopyString {
NSDictionary *options = @{NSStringEncodingDetectionSuggestedEncodingsKey : @[@(NSUTF8StringEncoding)]};
BOOL usedLossyConversion = NO;
NSStringEncoding encoding = [NSString stringEncodingForData:self encodingOptions:options convertedString:nil usedLossyConversion:&usedLossyConversion];
if (encoding == 0) {
return nil;
}
return [[NSString alloc] initWithBytesNoCopy:(void *)self.bytes length:self.length encoding:encoding freeWhenDone:NO];
}
NSString *RSHexadecimalStringWithBytes(const Byte *bytes, NSUInteger numberOfBytes) {
if (numberOfBytes < 1) {
return nil;
}
if (numberOfBytes == 16) {
// Common case  MD5 hash, for example.
return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7], bytes[8], bytes[9], bytes[10], bytes[11], bytes[12], bytes[13], bytes[14], bytes[15]];
}
NSMutableString *s = [[NSMutableString alloc] initWithString:@""];
NSUInteger i = 0;
for (i = 0; i < numberOfBytes; i++) {
[s appendString:[NSString stringWithFormat:@"%02x", bytes[i]]];
}
return [s copy];
}
- (NSString *)rs_hexadecimalString {
return RSHexadecimalStringWithBytes([self bytes], [self length]);
}
@end

View File

@ -1,11 +0,0 @@
//
// RSCore.h
//
//
// Created by Maurice Parker on 11/20/20.
//
@import Foundation;
#import "../NSData+RSCore.h"
#import "../NSSharingService+RSCore.h"

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSParser"
BuildableName = "RSParser"
BlueprintName = "RSParser"
ReferencedContainer = "container:">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSParserTests"
BuildableName = "RSParserTests"
BlueprintName = "RSParserTests"
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSParser"
BuildableName = "RSParser"
BlueprintName = "RSParser"
ReferencedContainer = "container:">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "RSParserTests"
BuildableName = "RSParserTests"
BlueprintName = "RSParserTests"
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>