Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[🚫DO NOT MERGE 🚫] Cimb 1 FA oauth flow #348

Open
wants to merge 11 commits into
base: develop
Choose a base branch
from
50 changes: 39 additions & 11 deletions ExampleApp/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
TradeItSDK.configure(
apiKey: AppDelegate.API_KEY,
oAuthCallbackUrl: URL(string: "tradeItExampleScheme://completeOAuth")!,
verify1FACallbackUrl: URL(string: "tradeItExampleScheme://complete1FA")!,
environment: AppDelegate.ENVIRONMENT,
userCountryCode: "US"
)
Expand Down Expand Up @@ -45,16 +46,20 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
print("=====> Received OAuth callback URL: \(url.absoluteString)")

let MANUAL_HOST = "manualCompleteOAuth"
let VERIFY_1FA = "complete1FA"

// Check for the intended url.scheme, url.host, and url.path before proceeding
if let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false),
urlComponents.scheme == "tradeitexamplescheme",
let host = urlComponents.host,
let queryItems = urlComponents.queryItems,
let oAuthVerifier = queryItems.filter({ $0.name == "oAuthVerifier" }).first?.value {
let queryItems = urlComponents.queryItems {

if host == MANUAL_HOST {
self.completeManualOAuth(oAuthVerifier: oAuthVerifier)
if let oAuthVerifier = queryItems.filter({ $0.name == "oAuthVerifier" }).first?.value {
self.completeManualOAuth(oAuthVerifier: oAuthVerifier)
}
} else if host == VERIFY_1FA {
self.handleExampleVerify1FA(verify1FACallbackUrl: url, host: host)
} else {
self.handleExampleOAuth(oAuthCallbackUrl: url, host: host)
}
Expand Down Expand Up @@ -183,14 +188,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
let YAHOO_HOST = "completeYahooOAuth"

if var topViewController = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topViewController.presentedViewController {
topViewController = presentedViewController
}

if let navController = topViewController as? UINavigationController,
let navTopViewController = navController.topViewController {
topViewController = navTopViewController
}
topViewController = getTopViewController(viewController: topViewController)

switch host {
case EXAMPLE_HOST:
Expand All @@ -211,6 +209,36 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
}
}
}

private func handleExampleVerify1FA(verify1FACallbackUrl: URL, host: String) {
let VERIFY_1FA = "complete1FA"
if var topViewController = UIApplication.shared.keyWindow?.rootViewController {
topViewController = getTopViewController(viewController: topViewController)

switch host {
case VERIFY_1FA:
TradeItSDK.launcher.handleVerify1FACallback(
onTopmostViewController: topViewController,
verify1FACallbackUrl: verify1FACallbackUrl
)
default:
print("=====> ERROR: Received unknown verify 1 FA callback URL host: \(host)")
}
}
}

private func getTopViewController(viewController: UIViewController) -> UIViewController {
var topViewController = viewController
while let presentedViewController = topViewController.presentedViewController {
topViewController = presentedViewController
}

if let navController = topViewController as? UINavigationController,
let navTopViewController = navController.topViewController {
topViewController = navTopViewController
}
return topViewController
}
}

// Only implement this protocol if you need to inject your own market data
Expand Down
3 changes: 3 additions & 0 deletions TradeItIosEmsApi/TradeItCancelOrderRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,8 @@
@property (nonatomic, copy, nullable) NSString * token;
@property (nonatomic, copy, nullable) NSString * accountNumber;
@property (nonatomic, copy, nullable) NSString * orderNumber;
@property (nonatomic, copy, nullable) NSString * interAppAddressCallback;

- (_Nonnull id)initWithInterAppAddressCallback:(NSString * _Nonnull)interAppAddressCallback;

@end
8 changes: 8 additions & 0 deletions TradeItIosEmsApi/TradeItCancelOrderRequest.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
#import "TradeItCancelOrderRequest.h"

@implementation TradeItCancelOrderRequest
- (id)initWithInterAppAddressCallback:(NSString *)interAppAddressCallback {
self = [super init];

if (self) {
self.interAppAddressCallback = interAppAddressCallback;
}

return self;
}
@end
9 changes: 9 additions & 0 deletions TradeItIosEmsApi/TradeItComplete1FARequest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#import <TradeItIosTicketSDK2/TradeItIosTicketSDK2.h>

@interface TradeItComplete1FARequest : TradeItRequest

-(nonnull id) initWithToken:(NSString* _Nullable) token;

@property (copy) NSString * _Nullable token;

@end
13 changes: 13 additions & 0 deletions TradeItIosEmsApi/TradeItComplete1FARequest.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#import "TradeItComplete1FARequest.h"

@implementation TradeItComplete1FARequest

-(id) initWithToken:(NSString*) token {
self = [super init];
if(self){
self.token = token;
}
return self;
}

@end
2 changes: 2 additions & 0 deletions TradeItIosEmsApi/TradeItIosEmsApiLib.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@
#import "TradeItFxOrderCapabilities.h"
#import "TradeItFxOrderCapabilitiesResult.h"
#import "TradeItFxQuoteRequest.h"
#import "TradeItVerifyOAuthURLResult.h"
#import "TradeItComplete1FARequest.h"

// Use the BalanceService to get account balance information
#import "TradeItAccountOverviewRequest.h"
Expand Down
5 changes: 4 additions & 1 deletion TradeItIosEmsApi/TradeItPlaceTradeRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

@interface TradeItPlaceTradeRequest : TradeItRequest

- (id _Nonnull)initWithOrderId:(NSString * _Nonnull) orderId;
- (id _Nonnull)initWithOrderId:(NSString * _Nonnull) orderId
andInterAppAddressCallback:(NSString * _Nonnull) interAppAddressCallback;

// The orderId as returned from the TradeItPreviewTradeRequest
@property (copy) NSString * _Nullable orderId;
Expand All @@ -21,4 +22,6 @@
// Setting this will be overriden
@property (copy) NSString * _Nullable token;

@property (copy) NSString * _Nullable interAppAddressCallback;

@end
4 changes: 3 additions & 1 deletion TradeItIosEmsApi/TradeItPlaceTradeRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@

@implementation TradeItPlaceTradeRequest

- (id)initWithOrderId:(NSString *) orderId {
- (id)initWithOrderId:(NSString *) orderId
andInterAppAddressCallback:(NSString *) interAppAddressCallback {
self = [super init];
if (self) {
self.orderId = orderId;
self.interAppAddressCallback = interAppAddressCallback;
}
return self;
}
Expand Down
2 changes: 2 additions & 0 deletions TradeItIosEmsApi/TradeItResult.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@

- (BOOL)isSecurityQuestion;

- (BOOL)isVerify1FA;

- (BOOL)isReviewOrder;

- (BOOL)isError;
Expand Down
4 changes: 4 additions & 0 deletions TradeItIosEmsApi/TradeItResult.m
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ - (BOOL)isSecurityQuestion {
return [@"INFORMATION_NEEDED" isEqualToString:self.status];
}

- (BOOL)isVerify1FA {
return [@"VERIFY_1FA" isEqualToString:self.status];
}

- (BOOL)isReviewOrder {
return [@"REVIEW_ORDER" isEqualToString:self.status];
}
Expand Down
9 changes: 9 additions & 0 deletions TradeItIosEmsApi/TradeItVerifyOAuthURLResult.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#import "TradeItResult.h"

@interface TradeItVerifyOAuthURLResult: TradeItResult

@property (nullable) NSString *oAuthURL;

- (NSURL * _Nullable)oAuthUrl;

@end
12 changes: 12 additions & 0 deletions TradeItIosEmsApi/TradeItVerifyOAuthURLResult.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#import "TradeItVerifyOAuthURLResult.h"

@implementation TradeItVerifyOAuthURLResult

- (NSURL *)oAuthUrl {
if (self.oAuthURL == NULL) {
return NULL;
}

return [[NSURL alloc] initWithString:self.oAuthURL];
}
@end
24 changes: 24 additions & 0 deletions TradeItIosTicketSDK2.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -524,11 +524,19 @@
B5749B551F46475300FCE1B5 /* CachedLinkedBrokerAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = B5749B531F46475300FCE1B5 /* CachedLinkedBrokerAccount.m */; };
B57ABA301DBEA9C1009B82A3 /* LocalAuthentication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B57ABA2F1DBEA9C1009B82A3 /* LocalAuthentication.framework */; };
B57ABA321DBEAA39009B82A3 /* TradeItDeviceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57ABA311DBEAA39009B82A3 /* TradeItDeviceManager.swift */; };
B58ADB3220AF666D006BD374 /* TradeItVerifyOAuthURLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B58ADB3020AF666D006BD374 /* TradeItVerifyOAuthURLResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
B58ADB3320AF666D006BD374 /* TradeItVerifyOAuthURLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B58ADB3020AF666D006BD374 /* TradeItVerifyOAuthURLResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
B58ADB3420AF666D006BD374 /* TradeItVerifyOAuthURLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B58ADB3120AF666D006BD374 /* TradeItVerifyOAuthURLResult.m */; };
B58ADB3520AF666D006BD374 /* TradeItVerifyOAuthURLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B58ADB3120AF666D006BD374 /* TradeItVerifyOAuthURLResult.m */; };
B58BC7241DDBA6780079ED8B /* TradeItWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58BC7231DDBA6780079ED8B /* TradeItWebViewController.swift */; };
B58BC7271DDBBE260079ED8B /* TradeItUserAgentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = B58BC7251DDBBE260079ED8B /* TradeItUserAgentProvider.h */; settings = {ATTRIBUTES = (Public, ); }; };
B58BC7281DDBBE260079ED8B /* TradeItUserAgentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B58BC7261DDBBE260079ED8B /* TradeItUserAgentProvider.m */; };
B59F0CC61EA69D3E00C0F56F /* TradeItSubtitleWithDetailsCellTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59F0CC51EA69D3E00C0F56F /* TradeItSubtitleWithDetailsCellTableViewCell.swift */; };
B59F0CC71EA69D3E00C0F56F /* TradeItSubtitleWithDetailsCellTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59F0CC51EA69D3E00C0F56F /* TradeItSubtitleWithDetailsCellTableViewCell.swift */; };
B59FB19320B8B2A800BAC4EF /* TradeItComplete1FARequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B59FB19120B8B2A800BAC4EF /* TradeItComplete1FARequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
B59FB19420B8B2A800BAC4EF /* TradeItComplete1FARequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B59FB19120B8B2A800BAC4EF /* TradeItComplete1FARequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
B59FB19520B8B2A800BAC4EF /* TradeItComplete1FARequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B59FB19220B8B2A800BAC4EF /* TradeItComplete1FARequest.m */; };
B59FB19620B8B2A800BAC4EF /* TradeItComplete1FARequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B59FB19220B8B2A800BAC4EF /* TradeItComplete1FARequest.m */; };
B5A6E17A1F60300C00093161 /* TradeItOrdersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A6E1791F60300C00093161 /* TradeItOrdersViewController.swift */; };
B5A6E17B1F60300C00093161 /* TradeItOrdersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A6E1791F60300C00093161 /* TradeItOrdersViewController.swift */; };
B5AFC1F11F33A1BC0043E20F /* TradeItRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5AFC1F01F33A1BC0043E20F /* TradeItRequestFactory.swift */; };
Expand Down Expand Up @@ -1244,10 +1252,14 @@
B5749B531F46475300FCE1B5 /* CachedLinkedBrokerAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedLinkedBrokerAccount.m; sourceTree = "<group>"; };
B57ABA2F1DBEA9C1009B82A3 /* LocalAuthentication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LocalAuthentication.framework; path = System/Library/Frameworks/LocalAuthentication.framework; sourceTree = SDKROOT; };
B57ABA311DBEAA39009B82A3 /* TradeItDeviceManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TradeItDeviceManager.swift; sourceTree = "<group>"; };
B58ADB3020AF666D006BD374 /* TradeItVerifyOAuthURLResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TradeItVerifyOAuthURLResult.h; sourceTree = "<group>"; };
B58ADB3120AF666D006BD374 /* TradeItVerifyOAuthURLResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TradeItVerifyOAuthURLResult.m; sourceTree = "<group>"; };
B58BC7231DDBA6780079ED8B /* TradeItWebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TradeItWebViewController.swift; sourceTree = "<group>"; };
B58BC7251DDBBE260079ED8B /* TradeItUserAgentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TradeItUserAgentProvider.h; sourceTree = "<group>"; };
B58BC7261DDBBE260079ED8B /* TradeItUserAgentProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TradeItUserAgentProvider.m; sourceTree = "<group>"; };
B59F0CC51EA69D3E00C0F56F /* TradeItSubtitleWithDetailsCellTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TradeItSubtitleWithDetailsCellTableViewCell.swift; sourceTree = "<group>"; };
B59FB19120B8B2A800BAC4EF /* TradeItComplete1FARequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TradeItComplete1FARequest.h; sourceTree = "<group>"; };
B59FB19220B8B2A800BAC4EF /* TradeItComplete1FARequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TradeItComplete1FARequest.m; sourceTree = "<group>"; };
B5A6E1791F60300C00093161 /* TradeItOrdersViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TradeItOrdersViewController.swift; sourceTree = "<group>"; };
B5AFC1F01F33A1BC0043E20F /* TradeItRequestFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TradeItRequestFactory.swift; sourceTree = "<group>"; };
B5AFC1F31F33A6EE0043E20F /* TradeitEmsEnvironments.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TradeitEmsEnvironments.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2027,6 +2039,8 @@
759FA1DE20A38DA900A4AD07 /* TradeItCryptoPreviewTradeRequest.m */,
E09C598720D46227003991E2 /* TradeItCryptoQuoteRequest.h */,
E09C598820D46227003991E2 /* TradeItCryptoQuoteRequest.m */,
B59FB19120B8B2A800BAC4EF /* TradeItComplete1FARequest.h */,
B59FB19220B8B2A800BAC4EF /* TradeItComplete1FARequest.m */,
);
name = Requests;
sourceTree = "<group>";
Expand Down Expand Up @@ -2086,6 +2100,8 @@
759FA1EA20A5CF0500A4AD07 /* TradeItCryptoPreviewTradeResult.m */,
E09C598120D4522D003991E2 /* TradeItCryptoQuoteResult.h */,
E09C598220D4522D003991E2 /* TradeItCryptoQuoteResult.m */,
B58ADB3020AF666D006BD374 /* TradeItVerifyOAuthURLResult.h */,
B58ADB3120AF666D006BD374 /* TradeItVerifyOAuthURLResult.m */,
);
name = Responses;
sourceTree = "<group>";
Expand Down Expand Up @@ -2209,6 +2225,7 @@
75BAABEC1DB7EF2F00E5435C /* TradeItSymbolLookupResult.h in Headers */,
75AB47651F003AA000A8BEC6 /* TradeItFxOrderCapabilitiesResult.h in Headers */,
B5E4626E1F58C24000C8ABA8 /* TradeItOrderLeg.h in Headers */,
B59FB19320B8B2A800BAC4EF /* TradeItComplete1FARequest.h in Headers */,
75BAABB11DB7EF2F00E5435C /* TradeItFxPosition.h in Headers */,
75BAABBC1DB7EF2F00E5435C /* TradeItLinkedLogin.h in Headers */,
75BAAB951DB7EF2F00E5435C /* TradeItAuthenticationRequest.h in Headers */,
Expand All @@ -2226,6 +2243,7 @@
759FA1E520A38F1200A4AD07 /* TradeItCryptoPreviewTradeDetails.h in Headers */,
75BAAB9B1DB7EF2F00E5435C /* TradeItAuthLinkResult.h in Headers */,
75BAABD01DB7EF2F00E5435C /* TradeItPreviewTradeResult.h in Headers */,
B58ADB3220AF666D006BD374 /* TradeItVerifyOAuthURLResult.h in Headers */,
757007511F43981E00B95044 /* TopGradientView.h in Headers */,
7591A9051EFAC56E008EB943 /* TradeItFxOrderLeg.h in Headers */,
75BAABE41DB7EF2F00E5435C /* TradeItSecurityQuestionResult.h in Headers */,
Expand Down Expand Up @@ -2308,6 +2326,7 @@
75AB47661F003AA000A8BEC6 /* TradeItFxOrderCapabilitiesResult.h in Headers */,
FC6E7A411DCD1F8B005225CC /* TradeItFxPosition.h in Headers */,
B5E4626F1F58C24000C8ABA8 /* TradeItOrderLeg.h in Headers */,
B59FB19420B8B2A800BAC4EF /* TradeItComplete1FARequest.h in Headers */,
FA80FFCC1DF21F2800C54091 /* TradeItOAuthLoginPopupUrlForMobileResult.h in Headers */,
FC6E7A461DCD1F8B005225CC /* TradeItLinkedLogin.h in Headers */,
FC6E7A471DCD1F8B005225CC /* TradeItAuthenticationRequest.h in Headers */,
Expand All @@ -2325,6 +2344,7 @@
759FA1E620A38F1200A4AD07 /* TradeItCryptoPreviewTradeDetails.h in Headers */,
FC6E7A511DCD1F8B005225CC /* TradeItAuthLinkResult.h in Headers */,
FC6E7A521DCD1F8B005225CC /* TradeItPreviewTradeResult.h in Headers */,
B58ADB3320AF666D006BD374 /* TradeItVerifyOAuthURLResult.h in Headers */,
757007521F43981E00B95044 /* TopGradientView.h in Headers */,
7591A9061EFAC56E008EB943 /* TradeItFxOrderLeg.h in Headers */,
FC6E7A541DCD1F8B005225CC /* TradeItSecurityQuestionResult.h in Headers */,
Expand Down Expand Up @@ -2965,6 +2985,7 @@
75BAAB941DB7EF2F00E5435C /* TradeItAuthenticationInfo.m in Sources */,
B5B8EBB61E8C29630098EC3D /* TradeItLinkedBrokerErrorTableViewCell.swift in Sources */,
7579DF3820AB7F37009B873B /* TradeItYahooCryptoTradingTicketViewController.swift in Sources */,
B58ADB3420AF666D006BD374 /* TradeItVerifyOAuthURLResult.m in Sources */,
75BAAAE41DB7EEB400E5435C /* TradeItTradingConfirmationViewController.swift in Sources */,
754200431EF8246E00B15E92 /* TicketRow.swift in Sources */,
75BAAB8E1DB7EF2F00E5435C /* TradeItAccountOverviewResult.m in Sources */,
Expand Down Expand Up @@ -3002,6 +3023,7 @@
75AB47671F003AA000A8BEC6 /* TradeItFxOrderCapabilitiesResult.m in Sources */,
75BAABB01DB7EF2F00E5435C /* TradeItFxAccountOverview.m in Sources */,
75BAAAA91DB7EEB400E5435C /* TradeItAccountSelectionTableViewCell.swift in Sources */,
B59FB19520B8B2A800BAC4EF /* TradeItComplete1FARequest.m in Sources */,
75BAABB21DB7EF2F00E5435C /* TradeItFxPosition.m in Sources */,
75E2022F1F19428E003660AF /* TradeItBrokerLogo.m in Sources */,
BAD1CF79207813E6008BF987 /* TradeItBrandedAccountNameCell.swift in Sources */,
Expand Down Expand Up @@ -3250,6 +3272,7 @@
FC6E79B81DCD1F8B005225CC /* TradeItAccountOverviewResult.m in Sources */,
FC6E79B91DCD1F8B005225CC /* TradeItPortfolioEquityPositionPresenter.swift in Sources */,
FC6E79BA1DCD1F8B005225CC /* TradeItPosition.m in Sources */,
B58ADB3520AF666D006BD374 /* TradeItVerifyOAuthURLResult.m in Sources */,
754200441EF8246E00B15E92 /* TicketRow.swift in Sources */,
75D94D1E1E7331E200EAE775 /* TradeItPortfolioAccountDetailsTableViewCell.swift in Sources */,
FC6E79BB1DCD1F8B005225CC /* TradeItUpdateLinkRequest.m in Sources */,
Expand Down Expand Up @@ -3288,6 +3311,7 @@
FC6E79D21DCD1F8B005225CC /* TradeItAccountSelectionViewController.swift in Sources */,
FC6E79D41DCD1F8B005225CC /* TradeItDeviceManager.swift in Sources */,
75E202301F19428E003660AF /* TradeItBrokerLogo.m in Sources */,
B59FB19620B8B2A800BAC4EF /* TradeItComplete1FARequest.m in Sources */,
B5BEEFAE1F20096300BAC0DF /* UIView+TradeIt.swift in Sources */,
FC6E79D51DCD1F8B005225CC /* Array+TradeIt.swift in Sources */,
BAD1CF7A207813E6008BF987 /* TradeItBrandedAccountNameCell.swift in Sources */,
Expand Down
Loading