diff --git a/Classes/CNSHockeyManager.h b/Classes/CNSHockeyManager.h index 6c30b5176b..8d34f1eb98 100644 --- a/Classes/CNSHockeyManager.h +++ b/Classes/CNSHockeyManager.h @@ -19,14 +19,23 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +@protocol CNSHockeyManagerDelegate + +@optional +- (BOOL)shouldUseLiveIdenfitier; + +@end + @interface CNSHockeyManager : NSObject { @private + id delegate; NSString *appIdentifier; } + (CNSHockeyManager *)sharedHockeyManager; - (void)configureWithIdentifier:(NSString *)appIdentifier delegate:(id)delegate; +- (void)configureWithBetaIdentifier:(NSString *)betaIdentifier liveIdentifier:(NSString *)liveIdentifier delegate:(id)delegate; @end diff --git a/Classes/CNSHockeyManager.m b/Classes/CNSHockeyManager.m index 061b02a09d..97a683d6b4 100644 --- a/Classes/CNSHockeyManager.m +++ b/Classes/CNSHockeyManager.m @@ -25,12 +25,18 @@ @interface CNSHockeyManager () +- (BOOL)shouldUseLiveIdenfitier; + - (void)configureJMC; +- (void)configureHockeyManager; +- (void)configureQuincyManager; @end @implementation CNSHockeyManager +#pragma mark - Public Class Methods + #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 + (CNSHockeyManager *)sharedHockeyManager { static CNSHockeyManager *sharedInstance = nil; @@ -71,6 +77,8 @@ return (jmcClass) && ([jmcClass respondsToSelector:@selector(instance)]); } +#pragma mark - Private Class Methods + + (void)disableJMCCrashReporter { id jmcClass = NSClassFromString(@"JMC"); id jmcInstance = [jmcClass performSelector:@selector(instance)]; @@ -111,18 +119,53 @@ [invocation invoke]; } +#pragma mark - Public Instance Methods + - (void)configureWithIdentifier:(NSString *)newAppIdentifier delegate:(id)delegate { [appIdentifier release]; appIdentifier = [newAppIdentifier copy]; - // Crash Reporting + [self configureQuincyManager]; + [self configureHockeyManager]; +} + + +- (void)configureWithBetaIdentifier:(NSString *)betaIdentifier liveIdentifier:(NSString *)liveIdentifier delegate:(id)delegate { + [appIdentifier release]; + + if ([self shouldUseLiveIdenfitier]) { + appIdentifier = [liveIdentifier copy]; + + [self configureQuincyManager]; + } + else { + appIdentifier = [betaIdentifier copy]; + + [self configureQuincyManager]; + [self configureHockeyManager]; + } +} + +#pragma mark - Private Instance Methods + +- (BOOL)shouldUseLiveIdenfitier { + BOOL delegateResult = NO; + if ([delegate respondsToSelector:@selector(shouldUseLiveIdenfitier)]) { + delegateResult = [(NSObject *)delegate shouldUseLiveIdenfitier]; + } + + return (delegateResult) || ([[BWHockeyManager sharedHockeyManager] isAppStoreEnvironment]); +} + +- (void)configureQuincyManager { [[BWQuincyManager sharedQuincyManager] setAppIdentifier:appIdentifier]; - - // Distribution +} + +- (void)configureHockeyManager { [[BWHockeyManager sharedHockeyManager] setAppIdentifier:appIdentifier]; [[BWHockeyManager sharedHockeyManager] setCheckForTracker:YES]; - // JMC + // Only if JMC is part of the project if ([[self class] isJMCPresent]) { [[BWHockeyManager sharedHockeyManager] addObserver:self forKeyPath:@"trackerConfig" options:0 context:nil]; [[self class] disableJMCCrashReporter]; @@ -168,6 +211,8 @@ - (void)dealloc { [appIdentifier release], appIdentifier = nil; + delegate = nil; + [super dealloc]; }