Skip to content

Commit 739e249

Browse files
committed
Merge pull request #12 from auth0/swift-2.0
Swift 2.0
2 parents 6788189 + b41513e commit 739e249

37 files changed

+1114
-469
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ profile
1818
DerivedData
1919
*.hmap
2020
*.ipa
21+
*.xcscmblueprint
2122

2223
# Bundler
2324
.bundle

.travis.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
reference: http://www.objc.io/issue-6/travis-ci.html
22
language: objective-c
3-
osx_image: xcode6.4
3+
osx_image: xcode7
44
before_install: true
55
install: true
66
git:
77
submodules: false
8-
script: script/cibuild
8+
script:
9+
- script/cibuild
910
branches:
1011
only:
1112
- master

Cartfile.private

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#Quick & Nimble
22

3-
github "Quick/Quick" ~> 0.3
4-
github "Quick/Nimble" ~> 0.4
3+
github "Quick/Quick" ~> 0.6
4+
github "Quick/Nimble" "v2.0.0-rc.3"

Cartfile.resolved

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "Quick/Nimble" "v0.4.2"
2-
github "Quick/Quick" "v0.3.1"
1+
github "Quick/Nimble" "811003c1e556d6fedd12a6e8b81da235a7479aca"
2+
github "Quick/Quick" "v0.6.0"

Carthage/Checkouts/Nimble

Submodule Nimble updated 72 files

Carthage/Checkouts/Quick

Submodule Quick updated 50 files

Gemfile

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
source 'https://rubygems.org'
2+
3+
gem 'xcpretty'

Gemfile.lock

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
GEM
2+
remote: https://rubygems.org/
3+
specs:
4+
xcpretty (0.1.12)
5+
6+
PLATFORMS
7+
ruby
8+
9+
DEPENDENCIES
10+
xcpretty

JWTDecode.playground/Contents.swift

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*:
2+
# JWTDecode.swift
3+
A swift framework to help you decode a [JWT](http://jwt.io) token in your iOS/OSX applications
4+
*/
5+
6+
//: First we need to import JWTDecode framework
7+
import JWTDecode
8+
9+
/*:
10+
Then paste here the token you wish to decode
11+
*/
12+
let token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3NhbXBsZXMuYXV0aDAuY29tIiwic3ViIjoiYXV0aDB8MTAxMDEwMTAxMCIsImF1ZCI6Imh0dHBzOi8vc2FtcGxlcy5hdXRoMC5jb20iLCJleHAiOjEzNzI2NzQzMzYsImlhdCI6MTM3MjYzODMzNiwianRpIjoicXdlcnR5MTIzNDU2IiwibmJmIjoxMzcyNjM4MzM2fQ.LvF9wSheCB5xarpydmurWgi9NOZkdES5AbNb_UWk9Ew"
13+
//: You can generate a new token in [jwt.io](http://jwt.io)
14+
15+
/*:
16+
## Decode
17+
Then here we try to decode it calling `decode(token: String) -> JWT` that will return an object with all the decoded values
18+
*/
19+
do {
20+
let jwt = try decode(token)
21+
22+
//: ### JWT parts
23+
24+
//: Header dictionary
25+
jwt.header
26+
//: Claims in token body
27+
jwt.body
28+
//: Token signature
29+
jwt.signature
30+
31+
//: ### Registered Claims
32+
33+
//: "aud" (Audience)
34+
jwt.audience
35+
//: "sub" (Subject)
36+
jwt.subject
37+
//: "jti" (JWT ID)
38+
jwt.identifier
39+
//: "iss" (Issuer)
40+
jwt.issuer
41+
//: "nbf" (Not Before)
42+
jwt.notBefore
43+
//: "iat" (Issued At)
44+
jwt.issuedAt
45+
//: "exp" (Expiration Time)
46+
jwt.expiresAt
47+
48+
//: ### Custom Claims
49+
//: If we also have our custom claims we can retrive them calling `claim<T>(name: String) -> T?` where `T` is the value type of the claim, e.g.: a `String`
50+
51+
let custom: String? = jwt.claim("email")
52+
//: ### Error Handling
53+
//: If the token is invalid an `NSError` will be thrown
54+
} catch let error as NSError {
55+
error.localizedDescription
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<playground version='5.0' target-platform='ios' requires-full-environment='true' display-mode='rendered'>
3+
<timeline fileName='timeline.xctimeline'/>
4+
</playground>
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Timeline
3+
version = "3.0">
4+
<TimelineItems>
5+
<LoggerValueHistoryTimelineItem
6+
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=1536&amp;EndingColumnNumber=13&amp;EndingLineNumber=26&amp;StartingColumnNumber=5&amp;StartingLineNumber=26&amp;Timestamp=463532561.17046"
7+
selectedRepresentationIndex = "0"
8+
shouldTrackSuperviewWidth = "NO">
9+
</LoggerValueHistoryTimelineItem>
10+
<LoggerValueHistoryTimelineItem
11+
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=1536&amp;EndingColumnNumber=18&amp;EndingLineNumber=26&amp;StartingColumnNumber=5&amp;StartingLineNumber=26&amp;Timestamp=463532561.170751"
12+
selectedRepresentationIndex = "0"
13+
shouldTrackSuperviewWidth = "NO">
14+
</LoggerValueHistoryTimelineItem>
15+
<LoggerValueHistoryTimelineItem
16+
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=1536&amp;EndingColumnNumber=17&amp;EndingLineNumber=26&amp;StartingColumnNumber=5&amp;StartingLineNumber=26&amp;Timestamp=463532561.170973"
17+
selectedRepresentationIndex = "0"
18+
shouldTrackSuperviewWidth = "NO">
19+
</LoggerValueHistoryTimelineItem>
20+
<LoggerValueHistoryTimelineItem
21+
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=1536&amp;EndingColumnNumber=17&amp;EndingLineNumber=26&amp;StartingColumnNumber=5&amp;StartingLineNumber=26&amp;Timestamp=463532561.171144"
22+
selectedRepresentationIndex = "0"
23+
shouldTrackSuperviewWidth = "NO">
24+
</LoggerValueHistoryTimelineItem>
25+
<LoggerValueHistoryTimelineItem
26+
documentLocation = "#CharacterRangeLen=13&amp;CharacterRangeLoc=1548&amp;EndingColumnNumber=18&amp;EndingLineNumber=26&amp;StartingColumnNumber=5&amp;StartingLineNumber=26&amp;Timestamp=463532561.171315"
27+
selectedRepresentationIndex = "0"
28+
shouldTrackSuperviewWidth = "NO">
29+
</LoggerValueHistoryTimelineItem>
30+
<LoggerValueHistoryTimelineItem
31+
documentLocation = "#CharacterRangeLen=1&amp;CharacterRangeLoc=1597&amp;EndingColumnNumber=10&amp;EndingLineNumber=54&amp;StartingColumnNumber=5&amp;StartingLineNumber=54&amp;Timestamp=463532561.171487"
32+
selectedRepresentationIndex = "0"
33+
shouldTrackSuperviewWidth = "NO">
34+
</LoggerValueHistoryTimelineItem>
35+
<LoggerValueHistoryTimelineItem
36+
documentLocation = "#CharacterRangeLen=12&amp;CharacterRangeLoc=1586&amp;EndingColumnNumber=17&amp;EndingLineNumber=54&amp;StartingColumnNumber=5&amp;StartingLineNumber=54&amp;Timestamp=463532561.171656"
37+
selectedRepresentationIndex = "0"
38+
shouldTrackSuperviewWidth = "NO">
39+
</LoggerValueHistoryTimelineItem>
40+
</TimelineItems>
41+
</Timeline>

JWTDecode.xcodeproj/project.pbxproj

+38-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
5F05AF801B62E9C200C4A9E6 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F05AF7D1B62E9C200C4A9E6 /* Nimble.framework */; };
2121
5F05AF811B62E9C200C4A9E6 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F05AF7E1B62E9C200C4A9E6 /* Quick.framework */; };
2222
5F05AF821B62E9C200C4A9E6 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F05AF7E1B62E9C200C4A9E6 /* Quick.framework */; };
23+
5F8B43691B9F99B400A0D5AE /* A0JWT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8B43681B9F99B400A0D5AE /* A0JWT.swift */; settings = {ASSET_TAGS = (); }; };
24+
5F8B436A1B9F99B400A0D5AE /* A0JWT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8B43681B9F99B400A0D5AE /* A0JWT.swift */; settings = {ASSET_TAGS = (); }; };
25+
5F8B436C1B9F9EDB00A0D5AE /* JWTHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8B436B1B9F9EDB00A0D5AE /* JWTHelper.swift */; settings = {ASSET_TAGS = (); }; };
26+
5F8B436D1B9F9EDB00A0D5AE /* JWTHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8B436B1B9F9EDB00A0D5AE /* JWTHelper.swift */; settings = {ASSET_TAGS = (); }; };
27+
5FE49DCD1BA0D5F700DE57D3 /* JWT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE49DCC1BA0D5F700DE57D3 /* JWT.swift */; settings = {ASSET_TAGS = (); }; };
28+
5FE49DCE1BA0D5F700DE57D3 /* JWT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE49DCC1BA0D5F700DE57D3 /* JWT.swift */; settings = {ASSET_TAGS = (); }; };
29+
5FE49DD01BA0D66F00DE57D3 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE49DCF1BA0D66F00DE57D3 /* Errors.swift */; settings = {ASSET_TAGS = (); }; };
30+
5FE49DD11BA0D66F00DE57D3 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE49DCF1BA0D66F00DE57D3 /* Errors.swift */; settings = {ASSET_TAGS = (); }; };
2331
/* End PBXBuildFile section */
2432

2533
/* Begin PBXContainerItemProxy section */
@@ -53,6 +61,11 @@
5361
5F0069401B3C828F0048928E /* A0JWTDecodeSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A0JWTDecodeSpec.m; sourceTree = "<group>"; };
5462
5F05AF7D1B62E9C200C4A9E6 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5563
5F05AF7E1B62E9C200C4A9E6 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; };
64+
5F0A5E291B9A6D4A005289CF /* JWTDecode.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = JWTDecode.playground; sourceTree = SOURCE_ROOT; };
65+
5F8B43681B9F99B400A0D5AE /* A0JWT.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = A0JWT.swift; sourceTree = "<group>"; };
66+
5F8B436B1B9F9EDB00A0D5AE /* JWTHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JWTHelper.swift; sourceTree = "<group>"; };
67+
5FE49DCC1BA0D5F700DE57D3 /* JWT.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JWT.swift; sourceTree = "<group>"; };
68+
5FE49DCF1BA0D66F00DE57D3 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = "<group>"; };
5669
/* End PBXFileReference section */
5770

5871
/* Begin PBXFrameworksBuildPhase section */
@@ -98,6 +111,7 @@
98111
children = (
99112
5F0068E41B3B46240048928E /* JWTDecode */,
100113
5F0068F11B3B46240048928E /* JWTDecodeTests */,
114+
5F0A5E291B9A6D4A005289CF /* JWTDecode.playground */,
101115
5F0068E31B3B46240048928E /* Products */,
102116
);
103117
sourceTree = "<group>";
@@ -117,8 +131,11 @@
117131
isa = PBXGroup;
118132
children = (
119133
5F0068E71B3B46240048928E /* JWTDecode.h */,
120-
5F0068E51B3B46240048928E /* Supporting Files */,
134+
5F8B43681B9F99B400A0D5AE /* A0JWT.swift */,
121135
5F0069021B3B511F0048928E /* JWTDecode.swift */,
136+
5FE49DCC1BA0D5F700DE57D3 /* JWT.swift */,
137+
5FE49DCF1BA0D66F00DE57D3 /* Errors.swift */,
138+
5F0068E51B3B46240048928E /* Supporting Files */,
122139
);
123140
path = JWTDecode;
124141
sourceTree = "<group>";
@@ -138,6 +155,7 @@
138155
5F0069221B3C4A7F0048928E /* JWTDecodeSpec.swift */,
139156
5F0069401B3C828F0048928E /* A0JWTDecodeSpec.m */,
140157
5F00693F1B3C828E0048928E /* JWTDecode-iOSTests-Bridging-Header.h */,
158+
5F8B436B1B9F9EDB00A0D5AE /* JWTHelper.swift */,
141159
);
142160
path = JWTDecodeTests;
143161
sourceTree = "<group>";
@@ -252,7 +270,8 @@
252270
5F0068D91B3B46240048928E /* Project object */ = {
253271
isa = PBXProject;
254272
attributes = {
255-
LastUpgradeCheck = 0630;
273+
LastSwiftUpdateCheck = 0700;
274+
LastUpgradeCheck = 0700;
256275
ORGANIZATIONNAME = Auth0;
257276
TargetAttributes = {
258277
5F0068E11B3B46240048928E = {
@@ -325,14 +344,18 @@
325344
isa = PBXSourcesBuildPhase;
326345
buildActionMask = 2147483647;
327346
files = (
347+
5FE49DD01BA0D66F00DE57D3 /* Errors.swift in Sources */,
348+
5F8B43691B9F99B400A0D5AE /* A0JWT.swift in Sources */,
328349
5F0069031B3B511F0048928E /* JWTDecode.swift in Sources */,
350+
5FE49DCD1BA0D5F700DE57D3 /* JWT.swift in Sources */,
329351
);
330352
runOnlyForDeploymentPostprocessing = 0;
331353
};
332354
5F0068E91B3B46240048928E /* Sources */ = {
333355
isa = PBXSourcesBuildPhase;
334356
buildActionMask = 2147483647;
335357
files = (
358+
5F8B436C1B9F9EDB00A0D5AE /* JWTHelper.swift in Sources */,
336359
5F0069231B3C4A7F0048928E /* JWTDecodeSpec.swift in Sources */,
337360
5F0069411B3C828F0048928E /* A0JWTDecodeSpec.m in Sources */,
338361
);
@@ -342,7 +365,10 @@
342365
isa = PBXSourcesBuildPhase;
343366
buildActionMask = 2147483647;
344367
files = (
368+
5FE49DD11BA0D66F00DE57D3 /* Errors.swift in Sources */,
369+
5F8B436A1B9F99B400A0D5AE /* A0JWT.swift in Sources */,
345370
5F00693E1B3C7B930048928E /* JWTDecode.swift in Sources */,
371+
5FE49DCE1BA0D5F700DE57D3 /* JWT.swift in Sources */,
346372
);
347373
runOnlyForDeploymentPostprocessing = 0;
348374
};
@@ -351,6 +377,7 @@
351377
buildActionMask = 2147483647;
352378
files = (
353379
5F0069241B3C4A860048928E /* JWTDecodeSpec.swift in Sources */,
380+
5F8B436D1B9F9EDB00A0D5AE /* JWTHelper.swift in Sources */,
354381
);
355382
runOnlyForDeploymentPostprocessing = 0;
356383
};
@@ -392,6 +419,7 @@
392419
CURRENT_PROJECT_VERSION = 1;
393420
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
394421
ENABLE_STRICT_OBJC_MSGSEND = YES;
422+
ENABLE_TESTABILITY = YES;
395423
GCC_C_LANGUAGE_STANDARD = gnu99;
396424
GCC_DYNAMIC_NO_PIC = NO;
397425
GCC_NO_COMMON_BLOCKS = YES;
@@ -471,6 +499,7 @@
471499
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
472500
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
473501
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
502+
PRODUCT_BUNDLE_IDENTIFIER = com.auth0.JWTDecode;
474503
PRODUCT_MODULE_NAME = JWTDecode;
475504
PRODUCT_NAME = JWTDecode;
476505
SKIP_INSTALL = YES;
@@ -490,6 +519,7 @@
490519
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
491520
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
492521
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
522+
PRODUCT_BUNDLE_IDENTIFIER = com.auth0.JWTDecode;
493523
PRODUCT_MODULE_NAME = JWTDecode;
494524
PRODUCT_NAME = JWTDecode;
495525
SKIP_INSTALL = YES;
@@ -510,6 +540,7 @@
510540
);
511541
INFOPLIST_FILE = JWTDecodeTests/Info.plist;
512542
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
543+
PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)";
513544
PRODUCT_NAME = "$(TARGET_NAME)";
514545
SWIFT_OBJC_BRIDGING_HEADER = "JWTDecodeTests/JWTDecode-iOSTests-Bridging-Header.h";
515546
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -526,6 +557,7 @@
526557
);
527558
INFOPLIST_FILE = JWTDecodeTests/Info.plist;
528559
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
560+
PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)";
529561
PRODUCT_NAME = "$(TARGET_NAME)";
530562
SWIFT_OBJC_BRIDGING_HEADER = "JWTDecodeTests/JWTDecode-iOSTests-Bridging-Header.h";
531563
};
@@ -549,6 +581,7 @@
549581
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
550582
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
551583
MACOSX_DEPLOYMENT_TARGET = 10.10;
584+
PRODUCT_BUNDLE_IDENTIFIER = com.auth0.JWTDecode;
552585
PRODUCT_MODULE_NAME = JWTDecode;
553586
PRODUCT_NAME = JWTDecode;
554587
SDKROOT = macosx;
@@ -569,6 +602,7 @@
569602
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
570603
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
571604
MACOSX_DEPLOYMENT_TARGET = 10.10;
605+
PRODUCT_BUNDLE_IDENTIFIER = com.auth0.JWTDecode;
572606
PRODUCT_MODULE_NAME = JWTDecode;
573607
PRODUCT_NAME = JWTDecode;
574608
SDKROOT = macosx;
@@ -592,6 +626,7 @@
592626
INFOPLIST_FILE = JWTDecodeTests/Info.plist;
593627
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
594628
MACOSX_DEPLOYMENT_TARGET = 10.10;
629+
PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)";
595630
PRODUCT_NAME = "$(TARGET_NAME)";
596631
SDKROOT = macosx;
597632
};
@@ -608,6 +643,7 @@
608643
INFOPLIST_FILE = JWTDecodeTests/Info.plist;
609644
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
610645
MACOSX_DEPLOYMENT_TARGET = 10.10;
646+
PRODUCT_BUNDLE_IDENTIFIER = "com.auth0.$(PRODUCT_NAME:rfc1034identifier)";
611647
PRODUCT_NAME = "$(TARGET_NAME)";
612648
SDKROOT = macosx;
613649
};

JWTDecode.xcodeproj/xcshareddata/xcschemes/JWTDecode-OSX.xcscheme

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0630"
3+
LastUpgradeVersion = "0700"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -37,10 +37,10 @@
3737
</BuildActionEntries>
3838
</BuildAction>
3939
<TestAction
40+
buildConfiguration = "Debug"
4041
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
4142
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
42-
shouldUseLaunchSchemeArgsEnv = "YES"
43-
buildConfiguration = "Debug">
43+
shouldUseLaunchSchemeArgsEnv = "YES">
4444
<Testables>
4545
<TestableReference
4646
skipped = "NO">
@@ -62,15 +62,18 @@
6262
ReferencedContainer = "container:JWTDecode.xcodeproj">
6363
</BuildableReference>
6464
</MacroExpansion>
65+
<AdditionalOptions>
66+
</AdditionalOptions>
6567
</TestAction>
6668
<LaunchAction
69+
buildConfiguration = "Debug"
6770
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
6871
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
6972
launchStyle = "0"
7073
useCustomWorkingDirectory = "NO"
71-
buildConfiguration = "Debug"
7274
ignoresPersistentStateOnLaunch = "NO"
7375
debugDocumentVersioning = "YES"
76+
debugServiceExtension = "internal"
7477
allowLocationSimulation = "YES">
7578
<MacroExpansion>
7679
<BuildableReference
@@ -85,10 +88,10 @@
8588
</AdditionalOptions>
8689
</LaunchAction>
8790
<ProfileAction
91+
buildConfiguration = "Release"
8892
shouldUseLaunchSchemeArgsEnv = "YES"
8993
savedToolIdentifier = ""
9094
useCustomWorkingDirectory = "NO"
91-
buildConfiguration = "Release"
9295
debugDocumentVersioning = "YES">
9396
<MacroExpansion>
9497
<BuildableReference

0 commit comments

Comments
 (0)