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

News Feed + React Native #735

Merged
merged 20 commits into from
Jan 15, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@ DerivedData
*.xcuserstate
Lets\ Do\ This/keys.plist
Lets\ Do\ This/Resources/Fonts
node_modules/
npm-debug.log
30 changes: 29 additions & 1 deletion Lets Do This.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
421774269F5DF5997622C2F9 /* libPods-Lets Do This.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD644C9FDE4E95B4C94D523F /* libPods-Lets Do This.a */; };
569AA55E1B4085A000D8C8C9 /* InterfaceBuilderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 569AA55D1B4085A000D8C8C9 /* InterfaceBuilderView.m */; };
79E2E28707E3FB3559C51480 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FD686577156AB49815812E2 /* libPods.a */; };
B2000DDB1C06471900197004 /* LDTProfileReportbackItemTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B2000DD91C06471900197004 /* LDTProfileReportbackItemTableViewCell.m */; };
B2000DDC1C06471900197004 /* LDTProfileReportbackItemTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B2000DDA1C06471900197004 /* LDTProfileReportbackItemTableViewCell.xib */; };
B20881A11B0B9B0F00E697B2 /* keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = B20881A01B0B9B0F00E697B2 /* keys.plist */; };
Expand All @@ -22,6 +23,8 @@
B211C41E1C3AF4EF00A94E64 /* LDTCauseListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B211C41D1C3AF4EF00A94E64 /* LDTCauseListView.xib */; };
B211C4221C3AF54800A94E64 /* LDTCauseListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B211C4211C3AF54800A94E64 /* LDTCauseListViewController.m */; };
B212C2621B4ED6F300376BB1 /* LDTBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B212C2611B4ED6F300376BB1 /* LDTBaseViewController.m */; };
B21306FC1C486E5C003893DB /* LDTNewsArticleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B21306FB1C486E5C003893DB /* LDTNewsArticleViewController.m */; };
B21307001C487F92003893DB /* main.jsbundle in Resources */ = {isa = PBXBuildFile; fileRef = B21306FF1C487F92003893DB /* main.jsbundle */; };
B216CFC61B685EE8007E1914 /* UIImageView+LDT.m in Sources */ = {isa = PBXBuildFile; fileRef = B216CFC51B685EE8007E1914 /* UIImageView+LDT.m */; };
B21996B11B7CFEDA0054EADC /* LDTHeaderCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = B21996AF1B7CFEDA0054EADC /* LDTHeaderCollectionReusableView.m */; };
B21996B21B7CFEDA0054EADC /* LDTHeaderCollectionReusableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B21996B01B7CFEDA0054EADC /* LDTHeaderCollectionReusableView.xib */; };
Expand Down Expand Up @@ -60,6 +63,7 @@
B2A136601B3D1AEF00D20273 /* LDTUserRegisterView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B2A1365F1B3D1AEF00D20273 /* LDTUserRegisterView.xib */; };
B2A136631B3D9BC600D20273 /* LDTUserRegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B2A136621B3D9BC600D20273 /* LDTUserRegisterViewController.m */; };
B2A41A051B5DCC5300C6C1A6 /* LDTSettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B2A41A041B5DCC5300C6C1A6 /* LDTSettingsView.xib */; };
B2BB8F191C457CEC000EA5CA /* LDTNewsFeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B2BB8F181C457CEC000EA5CA /* LDTNewsFeedViewController.m */; };
B2C1ADA51C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B2C1ADA31C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.m */; };
B2C1ADA61C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B2C1ADA41C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.xib */; };
B2C3054B1BE142AE0046CD10 /* NSError+LDT.m in Sources */ = {isa = PBXBuildFile; fileRef = B2C3054A1BE142AE0046CD10 /* NSError+LDT.m */; };
Expand Down Expand Up @@ -100,6 +104,7 @@
481832CD7E534871B0CC8938 /* Pods-Lets Do This.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Lets Do This.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Lets Do This/Pods-Lets Do This.debug.xcconfig"; sourceTree = "<group>"; };
569AA55C1B4085A000D8C8C9 /* InterfaceBuilderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InterfaceBuilderView.h; path = Base/InterfaceBuilderView.h; sourceTree = "<group>"; };
569AA55D1B4085A000D8C8C9 /* InterfaceBuilderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = InterfaceBuilderView.m; path = Base/InterfaceBuilderView.m; sourceTree = "<group>"; };
8FD686577156AB49815812E2 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
B2000DD81C06471900197004 /* LDTProfileReportbackItemTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LDTProfileReportbackItemTableViewCell.h; path = Profile/LDTProfileReportbackItemTableViewCell.h; sourceTree = "<group>"; };
B2000DD91C06471900197004 /* LDTProfileReportbackItemTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTProfileReportbackItemTableViewCell.m; path = Profile/LDTProfileReportbackItemTableViewCell.m; sourceTree = "<group>"; };
B2000DDA1C06471900197004 /* LDTProfileReportbackItemTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LDTProfileReportbackItemTableViewCell.xib; path = Profile/LDTProfileReportbackItemTableViewCell.xib; sourceTree = "<group>"; };
Expand All @@ -121,6 +126,9 @@
B211C4211C3AF54800A94E64 /* LDTCauseListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTCauseListViewController.m; path = "Lets Do This/Controllers/Cause/LDTCauseListViewController.m"; sourceTree = SOURCE_ROOT; };
B212C2601B4ED6F300376BB1 /* LDTBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LDTBaseViewController.h; path = Base/LDTBaseViewController.h; sourceTree = "<group>"; };
B212C2611B4ED6F300376BB1 /* LDTBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTBaseViewController.m; path = Base/LDTBaseViewController.m; sourceTree = "<group>"; };
B21306FA1C486E5C003893DB /* LDTNewsArticleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LDTNewsArticleViewController.h; path = News/LDTNewsArticleViewController.h; sourceTree = "<group>"; };
B21306FB1C486E5C003893DB /* LDTNewsArticleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTNewsArticleViewController.m; path = News/LDTNewsArticleViewController.m; sourceTree = "<group>"; };
B21306FF1C487F92003893DB /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
B216CFC41B685EE8007E1914 /* UIImageView+LDT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LDT.h"; sourceTree = "<group>"; };
B216CFC51B685EE8007E1914 /* UIImageView+LDT.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LDT.m"; sourceTree = "<group>"; };
B21996AE1B7CFEDA0054EADC /* LDTHeaderCollectionReusableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LDTHeaderCollectionReusableView.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -181,6 +189,8 @@
B2A136611B3D9BC600D20273 /* LDTUserRegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LDTUserRegisterViewController.h; path = Login/LDTUserRegisterViewController.h; sourceTree = "<group>"; };
B2A136621B3D9BC600D20273 /* LDTUserRegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTUserRegisterViewController.m; path = Login/LDTUserRegisterViewController.m; sourceTree = "<group>"; };
B2A41A041B5DCC5300C6C1A6 /* LDTSettingsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LDTSettingsView.xib; path = Settings/LDTSettingsView.xib; sourceTree = "<group>"; };
B2BB8F171C457CEC000EA5CA /* LDTNewsFeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LDTNewsFeedViewController.h; path = News/LDTNewsFeedViewController.h; sourceTree = "<group>"; };
B2BB8F181C457CEC000EA5CA /* LDTNewsFeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTNewsFeedViewController.m; path = News/LDTNewsFeedViewController.m; sourceTree = "<group>"; };
B2C1ADA21C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LDTProfileNoSignupsTableViewCell.h; path = Profile/LDTProfileNoSignupsTableViewCell.h; sourceTree = "<group>"; };
B2C1ADA31C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LDTProfileNoSignupsTableViewCell.m; path = Profile/LDTProfileNoSignupsTableViewCell.m; sourceTree = "<group>"; };
B2C1ADA41C053B61007137B8 /* LDTProfileNoSignupsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LDTProfileNoSignupsTableViewCell.xib; path = Profile/LDTProfileNoSignupsTableViewCell.xib; sourceTree = "<group>"; };
Expand Down Expand Up @@ -232,6 +242,7 @@
buildActionMask = 2147483647;
files = (
421774269F5DF5997622C2F9 /* libPods-Lets Do This.a in Frameworks */,
79E2E28707E3FB3559C51480 /* libPods.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -249,6 +260,7 @@
isa = PBXGroup;
children = (
FD644C9FDE4E95B4C94D523F /* libPods-Lets Do This.a */,
8FD686577156AB49815812E2 /* libPods.a */,
);
name = Frameworks;
sourceTree = "<group>";
Expand Down Expand Up @@ -412,6 +424,17 @@
name = Onboarding;
sourceTree = "<group>";
};
B2BB8F1A1C457CF3000EA5CA /* News */ = {
isa = PBXGroup;
children = (
B2BB8F171C457CEC000EA5CA /* LDTNewsFeedViewController.h */,
B2BB8F181C457CEC000EA5CA /* LDTNewsFeedViewController.m */,
B21306FA1C486E5C003893DB /* LDTNewsArticleViewController.h */,
B21306FB1C486E5C003893DB /* LDTNewsArticleViewController.m */,
);
name = News;
sourceTree = "<group>";
};
B2E652DC1B43807000EF9D69 /* Base */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -478,6 +501,7 @@
C2B1521F1ACE05510028C336 /* Views */,
C2B152191ACE05510028C336 /* Controllers */,
C2B151FC1ACE04C30028C336 /* Images.xcassets */,
B21306FF1C487F92003893DB /* main.jsbundle */,
C2B151FE1ACE04C30028C336 /* LaunchScreen.xib */,
B260387E1B44F84D002FE362 /* Resources */,
C2B151EC1ACE04C30028C336 /* Supporting Files */,
Expand Down Expand Up @@ -555,6 +579,7 @@
C2F35F0A1AD8272C00D12FE5 /* Login */,
B211C41C1C3AF4AA00A94E64 /* Cause */,
B22274021B587A02005C896D /* Campaign */,
B2BB8F1A1C457CF3000EA5CA /* News */,
B27AF0E11B4F487C00164926 /* Profile */,
B2E75D801B87B16C0015BE4A /* Reportback */,
B2629F201BAB459E00A1B5C3 /* Settings */,
Expand Down Expand Up @@ -734,6 +759,7 @@
B23E68271B8FC74E005BFB5E /* LDTCampaignDetailReportbackItemCell.xib in Resources */,
B24FE0331BAA49CE001CAD5D /* LDTSubmitReportbackView.xib in Resources */,
B273A7691B459BBA00CBD4E1 /* Brandon_bld.otf in Resources */,
B21307001C487F92003893DB /* main.jsbundle in Resources */,
B23E68221B8FC728005BFB5E /* LDTCampaignDetailCampaignCell.xib in Resources */,
B27AF0E71B4F493D00164926 /* LDTProfileView.xib in Resources */,
B2A1365B1B3C9FDA00D20273 /* LDTUserConnectView.xib in Resources */,
Expand Down Expand Up @@ -782,7 +808,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Lets Do This/Pods-Lets Do This-frameworks.sh\"\n";
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
568131DF1B730BA700FF9854 /* ShellScript */ = {
Expand Down Expand Up @@ -833,6 +859,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B2BB8F191C457CEC000EA5CA /* LDTNewsFeedViewController.m in Sources */,
B24B269C1C3B34F30039D76D /* LDTCauseDetailViewController.m in Sources */,
B24D53051C0F71040090C8EC /* LDTActivityViewController.m in Sources */,
B27FD03F1BBD99FF00A44952 /* LDTEpicFailViewController.m in Sources */,
Expand Down Expand Up @@ -865,6 +892,7 @@
B2C3054B1BE142AE0046CD10 /* NSError+LDT.m in Sources */,
C2B152201ACE05510028C336 /* AppDelegate.m in Sources */,
B216CFC61B685EE8007E1914 /* UIImageView+LDT.m in Sources */,
B21306FC1C486E5C003893DB /* LDTNewsArticleViewController.m in Sources */,
C2B151EF1ACE04C30028C336 /* main.m in Sources */,
B2000DDB1C06471900197004 /* LDTProfileReportbackItemTableViewCell.m in Sources */,
B21126271B618038009128E7 /* DSOUserManager.m in Sources */,
Expand Down
1 change: 1 addition & 0 deletions Lets Do This/Classes/AppDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic, readonly) NSURL *jsCodeLocation;
@property (strong, nonatomic) UIWindow *window;

@end
Expand Down
17 changes: 14 additions & 3 deletions Lets Do This/Classes/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,13 @@

#define isLoggingGoogleAnalytics NO

@implementation AppDelegate
@interface AppDelegate()

@property (strong, nonatomic, readwrite) NSURL *jsCodeLocation;

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

Expand All @@ -39,8 +44,6 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
[GAI sharedInstance].logger.logLevel = kGAILogLevelVerbose;
}
[Fabric with:@[[Crashlytics startWithAPIKey:keysDict[@"fabricApiKey"]]]];


[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
[SVProgressHUD setForegroundColor:LDTTheme.ctaBlueColor];
Expand All @@ -53,6 +56,14 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];

// Uncomment this for local development:
// NSString *urlString = @"http://localhost:8081/index.ios.bundle";
// self.jsCodeLocation = [NSURL URLWithString:urlString];

// Keep this uncommented for distribution builds.
// @todo: Add a build step to compile main.jsbundle (we're manually doing this in terminal to rebuild)
self.jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[LDTTabBarController alloc] init];
Expand Down
10 changes: 9 additions & 1 deletion Lets Do This/Controllers/Base/LDTTabBarController.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

#import "LDTTabBarController.h"
#import "LDTNewsFeedViewController.h"
#import "LDTProfileViewController.h"
#import "LDTOnboardingPageViewController.h"
#import "LDTUserConnectViewController.h"
Expand All @@ -30,15 +31,22 @@ - (id)init {
self.tabBar.tintColor = LDTTheme.ctaBlueColor;
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSFontAttributeName : [UIFont fontWithName:LDTTheme.fontName size:10.0f] } forState:UIControlStateNormal];

LDTNewsFeedViewController *newsFeedViewController = [[LDTNewsFeedViewController alloc] init];
newsFeedViewController.tabBarItem.image = [UIImage imageNamed:@"Me Icon"];
newsFeedViewController.title = @"News";
UINavigationController *newsFeedNavigationController = [[UINavigationController alloc] initWithRootViewController:newsFeedViewController];

LDTProfileViewController *profileVC = [[LDTProfileViewController alloc] initWithUser:[DSOUserManager sharedInstance].user];
profileVC.title = @"Me";
UINavigationController *profileNavVC = [[UINavigationController alloc] initWithRootViewController:profileVC];
profileNavVC.tabBarItem.image = [UIImage imageNamed:@"Me Icon"];

LDTCauseListViewController *causeListViewController = [[LDTCauseListViewController alloc] initWithNibName:@"LDTCauseListView" bundle:nil];
causeListViewController.tabBarItem.image = [UIImage imageNamed:@"Actions Icon"];
causeListViewController.title = @"Actions";
UINavigationController *causeListNavigationController = [[UINavigationController alloc] initWithRootViewController:causeListViewController];
self.viewControllers = [NSArray arrayWithObjects:causeListNavigationController, profileNavVC, nil];

self.viewControllers = [NSArray arrayWithObjects:newsFeedNavigationController, causeListNavigationController, profileNavVC, nil];
}

return self;
Expand Down
8 changes: 8 additions & 0 deletions Lets Do This/Controllers/Cause/LDTCauseListViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ - (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

self.navigationController.hidesBarsOnSwipe = NO;
// @todo: Not this?
// -(void)receivedNotification: is no longer being called, so something needs to be fixed (or remove all notifications in general)
if (self.causes.count == 0 && [DSOUserManager sharedInstance].activeCampaigns.count > 0) {
[self loadCauses];
}
}

#pragma mark - LDTCauseListViewController
Expand All @@ -55,6 +60,7 @@ - (void)styleView {
}

- (void)loadCauses {
[SVProgressHUD showWithStatus:@"Loading..."];
[[DSOAPI sharedInstance] loadCausesWithCompletionHandler:^(NSArray *causes) {
self.causes = causes;
NSArray *activeCampaigns = [DSOUserManager sharedInstance].activeCampaigns;
Expand All @@ -70,6 +76,7 @@ - (void)loadCauses {
}
}
}
[SVProgressHUD dismiss];
[self.tableView reloadData];
} errorHandler:^(NSError *error) {
[SVProgressHUD dismiss];
Expand All @@ -87,6 +94,7 @@ - (DSOCause *)causeWithID:(NSNumber *)causeID {

- (void)receivedNotification:(NSNotification *) notification {
if ([[notification name] isEqualToString:@"activeCampaignsLoaded"]) {
NSLog(@"Received notification");
[self loadCauses];
} else if ([[notification name] isEqualToString:@"Not Found"]) {
NSLog(@"epic fail");
Expand Down
15 changes: 15 additions & 0 deletions Lets Do This/Controllers/News/LDTNewsArticleViewController.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// LDTNewsArticleViewController.h
// Lets Do This
//
// Created by Aaron Schachter on 1/14/16.
// Copyright © 2016 Do Something. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface LDTNewsArticleViewController : UIViewController

- (instancetype)initWithArticleUrlString:(NSString *)articleUrlString;

@end
Loading