diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aaf536a3..6a9647800 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,10 +26,11 @@ Bugsnag Notifiers on other platforms. from the default convenience `init()` to ensure that `apiKey` has a value set. The `apiKey` must now be a correctly formatted one to be accepted. - * Swift: `try BugsnagConfiguration(_ apiKey)` - * Objective C: `[[BugsnagConfiguration alloc] initWithApiKey:error:]` + * Swift: `BugsnagConfiguration(_ apiKey)` + * Objective C: `[[BugsnagConfiguration alloc] initWithApiKey:]` [#446](https://github.com/bugsnag/bugsnag-cocoa/pull/446) + [#492](https://github.com/bugsnag/bugsnag-cocoa/pull/492) * Support editing breadcrumbs within an Event as objects. Breadcrumbs can now be inspected and modified from callbacks, for example: diff --git a/Source/BugsnagConfiguration.h b/Source/BugsnagConfiguration.h index af2cbbf16..c47cd9748 100644 --- a/Source/BugsnagConfiguration.h +++ b/Source/BugsnagConfiguration.h @@ -38,7 +38,6 @@ /** * BugsnagConfiguration error constants */ -extern NSString * _Nonnull const BSGConfigurationErrorDomain; typedef NS_ENUM(NSInteger, BSGConfigurationErrorCode) { BSGConfigurationErrorInvalidApiKey = 0 }; @@ -238,10 +237,9 @@ BugsnagBreadcrumbs *breadcrumbs; /** * The designated initializer. */ -- (instancetype _Nullable)initWithApiKey:(NSString *_Nonnull)apiKey - error:(NSError *_Nullable *_Nullable)error +- (instancetype _Nonnull)initWithApiKey:(NSString *_Nonnull)apiKey NS_DESIGNATED_INITIALIZER - NS_SWIFT_NAME(init(_:)) __attribute__((swift_error(nonnull_error))); + NS_SWIFT_NAME(init(_:)); /** * Set the endpoints to send data to. By default we'll send error reports to diff --git a/Source/BugsnagConfiguration.m b/Source/BugsnagConfiguration.m index b994f90cc..d04e22161 100644 --- a/Source/BugsnagConfiguration.m +++ b/Source/BugsnagConfiguration.m @@ -40,7 +40,6 @@ static NSString *const BSGApiKeyError = @"apiKey must be a 32-digit hexadecimal value."; static NSString *const BSGInitError = @"Init is unavailable. Use [[BugsnagConfiguration alloc] initWithApiKey:] instead."; static const int BSGApiKeyLength = 32; -NSString * const BSGConfigurationErrorDomain = @"com.Bugsnag.CocoaNotifier.Configuration"; // User info persistence keys NSString * const kBugsnagUserKeychainAccount = @"BugsnagUserKeychainAccount"; @@ -104,15 +103,10 @@ - (instancetype)init { /** * The designated initializer. */ --(instancetype)initWithApiKey:(NSString *)apiKey - error:(NSError * _Nullable __autoreleasing * _Nullable)error +- (instancetype _Nonnull)initWithApiKey:(NSString *_Nonnull)apiKey { - if (! [BugsnagConfiguration isValidApiKey:apiKey]) { - *error = [NSError errorWithDomain:BSGConfigurationErrorDomain - code:BSGConfigurationErrorInvalidApiKey - userInfo:@{NSLocalizedDescriptionKey : @"Invalid API key. Should be a 32-digit hex string."}]; - - return nil; + if (![BugsnagConfiguration isValidApiKey:apiKey]) { + bsg_log_err(@"Invalid configuration. apiKey should be a 32-character hexademical string, got \"%@\"", apiKey); } self = [super init]; diff --git a/Tests/BugsnagBaseUnitTest.m b/Tests/BugsnagBaseUnitTest.m index 27df96107..3929776f2 100644 --- a/Tests/BugsnagBaseUnitTest.m +++ b/Tests/BugsnagBaseUnitTest.m @@ -40,8 +40,7 @@ -(void)setUpBugsnagWillCallNotify:(bool)willNotify -(void)setUpBugsnagWillCallNotify:(bool)willNotify andPersistUser:(bool)willPersistUser { - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [configuration setPersistUser:willPersistUser]; if (willNotify) { diff --git a/Tests/BugsnagBreadcrumbsTest.m b/Tests/BugsnagBreadcrumbsTest.m index 8c395dd0d..fe318cc20 100644 --- a/Tests/BugsnagBreadcrumbsTest.m +++ b/Tests/BugsnagBreadcrumbsTest.m @@ -294,8 +294,7 @@ - (void)testBreadcrumbFromDict { */ - (void)testCallbackFreeConstructors2 { // Prevent sending events - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [configuration addOnSendBlock:^bool(BugsnagEvent * _Nonnull event) { return false; }]; [Bugsnag startBugsnagWithConfiguration:configuration]; @@ -362,8 +361,7 @@ - (void)testCallbackFreeConstructors2 { */ - (void)testCallbackFreeConstructors3 { // Prevent sending events - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [configuration addOnSendBlock:^bool(BugsnagEvent * _Nonnull event) { return false; }]; [Bugsnag startBugsnagWithConfiguration:configuration]; diff --git a/Tests/BugsnagConfigurationTests.m b/Tests/BugsnagConfigurationTests.m index 046fd986b..e64592f89 100644 --- a/Tests/BugsnagConfigurationTests.m +++ b/Tests/BugsnagConfigurationTests.m @@ -43,17 +43,17 @@ @implementation BugsnagConfigurationTests // ============================================================================= - (void)testDefaultSessionNotNil { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertNotNil(config.session); } - (void)testDefaultSessionConfig { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue([config autoTrackSessions]); } - (void)testSessionApiHeaders { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; NSDictionary *headers = [config sessionApiHeaders]; XCTAssertEqualObjects(config.apiKey, headers[@"Bugsnag-Api-Key"]); XCTAssertNotNil(headers[@"Bugsnag-Sent-At"]); @@ -61,7 +61,7 @@ - (void)testSessionApiHeaders { } - (void)testSessionEndpoints { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // Default endpoints XCTAssertEqualObjects([NSURL URLWithString:@"https://sessions.bugsnag.com"], config.sessionURL); @@ -72,7 +72,7 @@ - (void)testSessionEndpoints { } - (void)testSetEmptySessionsEndpoint { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setEndpointsForNotify:@"http://notify.example.com" sessions:@""]; BugsnagSessionTracker *sessionTracker = [[BugsnagSessionTracker alloc] initWithConfig:config postRecordCallback:nil]; @@ -83,7 +83,7 @@ - (void)testSetEmptySessionsEndpoint { } - (void)testSetMalformedSessionsEndpoint { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setEndpointsForNotify:@"http://notify.example.com" sessions:@"f"]; BugsnagSessionTracker *sessionTracker = [[BugsnagSessionTracker alloc] initWithConfig:config postRecordCallback:nil]; @@ -100,7 +100,7 @@ - (void)testAddOnSessionBlock { // Setup __block XCTestExpectation *expectation = [self expectationWithDescription:@"Remove On Session Block"]; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setEndpointsForNotify:@"http://notreal.bugsnag.com" sessions:@"http://notreal.bugsnag.com"]; XCTAssertEqual([[config onSessionBlocks] count], 0); BugsnagOnSessionBlock sessionBlock = ^(NSMutableDictionary * _Nonnull sessionPayload) { @@ -124,7 +124,7 @@ - (void)testRemoveOnSessionBlock { __block XCTestExpectation *calledExpectation = [self expectationWithDescription:@"Remove On Session Block"]; calledExpectation.inverted = YES; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setEndpointsForNotify:@"http://notreal.bugsnag.com" sessions:@"http://notreal.bugsnag.com"]; XCTAssertEqual([[config onSessionBlocks] count], 0); BugsnagOnSessionBlock sessionBlock = ^(NSMutableDictionary * _Nonnull sessionPayload) { @@ -158,7 +158,7 @@ - (void)testAddOnSessionBlockThenRemove { __block XCTestExpectation *expectation4 = [self expectationWithDescription:@"Remove On Session Block 4"]; expectation4.inverted = YES; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setEndpointsForNotify:@"http://notreal.bugsnag.com" sessions:@"http://notreal.bugsnag.com"]; XCTAssertEqual([[config onSessionBlocks] count], 0); @@ -213,7 +213,7 @@ - (void)testAddOnSessionBlockThenRemove { * Make sure slightly invalid removals and duplicate additions don't break things */ - (void)testRemoveNonexistentOnSessionBlocks { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertEqual([[config onSessionBlocks] count], 0); BugsnagOnSessionBlock sessionBlock1 = ^(NSMutableDictionary * _Nonnull sessionPayload) {}; BugsnagOnSessionBlock sessionBlock2 = ^(NSMutableDictionary * _Nonnull sessionPayload) {}; @@ -242,47 +242,47 @@ - (void)testRemoveNonexistentOnSessionBlocks { // ============================================================================= - (void)testNotifyReleaseStagesDefaultSends { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue([config shouldSendReports]); } - (void)testNotifyReleaseStagesNilSends { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.releaseStage = @"beta"; config.notifyReleaseStages = nil; XCTAssertTrue([config shouldSendReports]); } - (void)testNotifyReleaseStagesEmptySends { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.releaseStage = @"beta"; config.notifyReleaseStages = @[]; XCTAssertTrue([config shouldSendReports]); } - (void)testNotifyReleaseStagesIncludedSends { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.releaseStage = @"beta"; config.notifyReleaseStages = @[ @"beta" ]; XCTAssertTrue([config shouldSendReports]); } - (void)testNotifyReleaseStagesIncludedInManySends { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.releaseStage = @"beta"; config.notifyReleaseStages = @[ @"beta", @"production" ]; XCTAssertTrue([config shouldSendReports]); } - (void)testNotifyReleaseStagesExcludedSkipsSending { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.releaseStage = @"beta"; config.notifyReleaseStages = @[ @"production" ]; XCTAssertFalse([config shouldSendReports]); } - (void)testDefaultReleaseStage { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; #if DEBUG XCTAssertEqualObjects(@"development", config.releaseStage); #else @@ -295,7 +295,7 @@ - (void)testDefaultReleaseStage { // ============================================================================= - (void)testNotifyEndpoint { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertEqualObjects([NSURL URLWithString:@"https://notify.bugsnag.com/"], config.notifyURL); // Test overriding the notify endpoint (use dummy endpoints to avoid hitting production) @@ -304,7 +304,7 @@ - (void)testNotifyEndpoint { } - (void)testSetEndpoints { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setEndpointsForNotify:@"http://notify.example.com" sessions:@"http://sessions.example.com"]; XCTAssertEqualObjects([NSURL URLWithString:@"http://notify.example.com"], config.notifyURL); XCTAssertEqualObjects([NSURL URLWithString:@"http://sessions.example.com"], config.sessionURL); @@ -312,7 +312,7 @@ - (void)testSetEndpoints { // in debug these throw exceptions though in release are "tolerated" - (void)testSetNilNotifyEndpoint { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; NSString *notify = @"foo"; notify = nil; #if DEBUG @@ -325,7 +325,7 @@ - (void)testSetNilNotifyEndpoint { // in debug these throw exceptions though in release are "tolerated" - (void)testSetEmptyNotifyEndpoint { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; #if DEBUG XCTAssertThrowsSpecificNamed([config setEndpointsForNotify:@"" sessions:@"http://sessions.example.com"], NSException, NSInternalInconsistencyException); @@ -336,7 +336,7 @@ - (void)testSetEmptyNotifyEndpoint { // in debug these throw exceptions though in release are "tolerated" - (void)testSetMalformedNotifyEndpoint { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; #if DEBUG XCTAssertThrowsSpecificNamed([config setEndpointsForNotify:@"http://" sessions:@"http://sessions.example.com"], NSException, NSInternalInconsistencyException); @@ -371,7 +371,7 @@ - (void)testUserPersistence { NSString *name = @"foo"; NSString *userId = @"123"; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // Check property defaults to True XCTAssertTrue(config.persistUser); @@ -391,7 +391,7 @@ - (void)testUserPersistence { // XCTAssertEqualObjects([bsg_SSKeychain passwordForService:kBugsnagUserUserId account:kBugsnagUserKeychainAccount], userId); // Check persistence between invocations (when values have been set) - BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // XCTAssertEqualObjects(config2.currentUser.emailAddress, email); // XCTAssertTrue([config2.currentUser.name isEqualToString:name]); @@ -408,7 +408,7 @@ - (void)testUserPersistence { * Test that user data is (as far as we can tell) not persisted */ - (void)testUserNonPesistence { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.persistUser = false; [config deletePersistedUserData]; @@ -417,7 +417,7 @@ - (void)testUserNonPesistence { // XCTAssertNil([bsg_SSKeychain passwordForService:kBugsnagUserName account:kBugsnagUserKeychainAccount]); // XCTAssertNil([bsg_SSKeychain passwordForService:kBugsnagUserUserId account:kBugsnagUserKeychainAccount]); - BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertNil(config2.currentUser); } @@ -429,7 +429,7 @@ - (void)testPartialPesistence { NSString *name = @"foo"; NSString *userId = @"123"; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue(config.persistUser); [config deletePersistedUserData]; @@ -457,7 +457,7 @@ - (void)testPartialPesistence { * Test that persisting a BugsnagUser with all nil fields behaves as expected */ - (void)testAllUserDataNilPersistence { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue(config.persistUser); [config deletePersistedUserData]; @@ -480,7 +480,7 @@ - (void)testUserPersistenceAndMetadata { NSString *name = @"foo"; NSString *userId = @"123"; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue(config.persistUser); [config deletePersistedUserData]; @@ -494,7 +494,7 @@ - (void)testUserPersistenceAndMetadata { // Check that retrieving persisted user data also sets configuration metadata // Check persistence between invocations (when values have been set) -// BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; +// BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // XCTAssertTrue([config2.currentUser.emailAddress isEqualToString:email]); // XCTAssertTrue([config2.currentUser.name isEqualToString:name]); // XCTAssertTrue([config2.currentUser.userId isEqualToString:userId]); @@ -513,12 +513,12 @@ - (void)testNonPersistenceAndMetadata { NSString *name = @"foo"; NSString *userId = @"123"; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue(config.persistUser); [config setPersistUser:false]; [config deletePersistedUserData]; - BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // XCTAssertNil([[config2 metadata] getMetadata:BSGKeyUser key:BSGKeyId]); // XCTAssertNil([[config2 metadata] getMetadata:BSGKeyUser key:BSGKeyName]); // XCTAssertNil([[config2 metadata] getMetadata:BSGKeyUser key:BSGKeyEmail]); @@ -530,7 +530,7 @@ - (void)testNonPersistenceAndMetadata { } - (void)testSettingPersistUser { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue(config.persistUser); [config setPersistUser:false]; XCTAssertFalse(config.persistUser); @@ -546,39 +546,21 @@ - (void)testSettingPersistUser { * Test correct population of an NSError in the case of an invalid apiKey */ -(void)testDesignatedInitializerInvalidApiKey { - NSError *error; - BugsnagConfiguration *invalidApiConfig = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_16CHAR error:&error]; - XCTAssertNil(invalidApiConfig); - XCTAssertNotNil(error); - XCTAssertEqual([error domain], BSGConfigurationErrorDomain); - XCTAssertEqual([error code], BSGConfigurationErrorInvalidApiKey); - - XCTAssertTrue([[error domain] isEqualToString:@"com.Bugsnag.CocoaNotifier.Configuration"]); - XCTAssertEqual([error code], 0); - -// As per the docs the behaviour varies by platform -// https://developer.apple.com/documentation/foundation/nserror/1411580-userinfo?language=objc -#if TARGET_OS_MAC - XCTAssertTrue([[error userInfo] isKindOfClass:[NSDictionary class]]); - XCTAssertEqual([(NSDictionary *)[error userInfo] count], 1); -#else - XCTAssertNil([error userInfo]); -#endif + BugsnagConfiguration *invalidApiConfig = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_16CHAR]; + XCTAssertNotNil(invalidApiConfig); + XCTAssertEqualObjects(invalidApiConfig.apiKey, DUMMY_APIKEY_16CHAR); } /** * Test NSError is not populated in the case of a valid apiKey */ -(void)testDesignatedInitializerValidApiKey { - NSError *error; - BugsnagConfiguration *validApiConfig1 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *validApiConfig1 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertNotNil(validApiConfig1); - XCTAssertNil(error); XCTAssertEqual([validApiConfig1 apiKey], DUMMY_APIKEY_32CHAR_1); - BugsnagConfiguration *validApiConfig2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_2 error:nil]; + BugsnagConfiguration *validApiConfig2 = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_2]; XCTAssertNotNil(validApiConfig2); - XCTAssertNil(error); XCTAssertEqual([validApiConfig2 apiKey], DUMMY_APIKEY_32CHAR_2); } @@ -598,7 +580,7 @@ -(void)testUnavailableConvenienceInitializer { } - (void)testDefaultReportOOMs { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; #if DEBUG XCTAssertFalse([config enabledErrorTypes] & BSGErrorTypesOOMs); #else @@ -607,7 +589,7 @@ - (void)testDefaultReportOOMs { } - (void)testErrorApiHeaders { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; NSDictionary *headers = [config errorApiHeaders]; XCTAssertEqualObjects(config.apiKey, headers[@"Bugsnag-Api-Key"]); XCTAssertNotNil(headers[@"Bugsnag-Sent-At"]); @@ -615,7 +597,7 @@ - (void)testErrorApiHeaders { } - (void)testUser { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config setUser:@"123" withName:@"foo" andEmail:@"test@example.com"]; @@ -625,7 +607,7 @@ - (void)testUser { } - (void)testApiKeySetter { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertTrue([config.apiKey isEqualToString:DUMMY_APIKEY_32CHAR_1]); config.apiKey = DUMMY_APIKEY_32CHAR_1; XCTAssertEqual(DUMMY_APIKEY_32CHAR_1, config.apiKey); @@ -642,7 +624,7 @@ - (void)testApiKeySetter { } - (void)testHasValidApiKey { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertThrows(config.apiKey = DUMMY_APIKEY_16CHAR); XCTAssertTrue([config.apiKey isEqualToString:DUMMY_APIKEY_32CHAR_1]); @@ -652,7 +634,7 @@ - (void)testHasValidApiKey { } -(void)testBSGErrorTypes { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // Test all are set by default BSGErrorType enabledErrors = BSGErrorTypesNSExceptions @@ -675,7 +657,7 @@ -(void)testBSGErrorTypes { * Test the mapping between BSGErrorTypes and KSCrashTypes */ -(void)testCrashTypeMapping { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; BugsnagCrashSentry *sentry = [BugsnagCrashSentry new]; BSG_KSCrashType crashTypes = BSG_KSCrashTypeNSException | BSG_KSCrashTypeMachException @@ -709,8 +691,7 @@ -(void)testCrashTypeMapping { */ - (void) testRemoveOnSendBlock { // Prevent sending events - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertEqual([[configuration onSendBlocks] count], 0); BugsnagOnSendBlock block = ^bool(BugsnagEvent * _Nonnull event) { return false; }; @@ -729,8 +710,7 @@ - (void) testRemoveOnSendBlock { */ - (void) testClearOnSendBlock { // Prevent sending events - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; XCTAssertEqual([[configuration onSendBlocks] count], 0); BugsnagOnSendBlock block1 = ^bool(BugsnagEvent * _Nonnull event) { return false; }; diff --git a/Tests/BugsnagEventTests.m b/Tests/BugsnagEventTests.m index e851ed29a..f9a2713ca 100644 --- a/Tests/BugsnagEventTests.m +++ b/Tests/BugsnagEventTests.m @@ -27,7 +27,7 @@ @interface BugsnagEventTests : BugsnagBaseUnitTest @implementation BugsnagEventTests - (void)testNotifyReleaseStagesSendsFromConfig { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.notifyReleaseStages = @[ @"foo" ]; config.releaseStage = @"foo"; BugsnagHandledState *state = @@ -43,7 +43,7 @@ - (void)testNotifyReleaseStagesSendsFromConfig { } - (void)testNotifyReleaseStagesSkipsSendFromConfig { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.notifyReleaseStages = @[ @"foo", @"bar" ]; config.releaseStage = @"not foo or bar"; @@ -60,7 +60,7 @@ - (void)testNotifyReleaseStagesSkipsSendFromConfig { } - (void)testSessionJson { - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; BugsnagHandledState *state = [BugsnagHandledState handledStateWithSeverityReason:HandledException]; diff --git a/Tests/BugsnagPluginTest.m b/Tests/BugsnagPluginTest.m index 375a090a5..b9860cbbc 100644 --- a/Tests/BugsnagPluginTest.m +++ b/Tests/BugsnagPluginTest.m @@ -45,7 +45,7 @@ @implementation BugsnagPluginTest - (void)testAddPlugin { id plugin = [FakePlugin new]; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config addPlugin:plugin]; XCTAssertEqual([config.plugins anyObject], plugin); } @@ -55,7 +55,7 @@ - (void)testPluginLoaded { __block XCTestExpectation *expectation = [self expectationWithDescription:@"Plugin Loaded by Bugsnag"]; plugin.expectation = expectation; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config addPlugin:plugin]; [Bugsnag startBugsnagWithConfiguration:config]; [self waitForExpectations:@[expectation] timeout:3.0]; @@ -67,7 +67,7 @@ - (void)testCrashyPluginDoesNotCrashApp { CrashyPlugin *plugin = [CrashyPlugin new]; plugin.expectation = expectation; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [config addPlugin:plugin]; [Bugsnag startBugsnagWithConfiguration:config]; [self waitForExpectations:@[expectation] timeout:3.0]; diff --git a/Tests/BugsnagSessionTrackerStopTest.m b/Tests/BugsnagSessionTrackerStopTest.m index 73806bc99..31cbe940b 100644 --- a/Tests/BugsnagSessionTrackerStopTest.m +++ b/Tests/BugsnagSessionTrackerStopTest.m @@ -19,7 +19,7 @@ @implementation BugsnagSessionTrackerStopTest - (void)setUp { [super setUp]; - self.configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + self.configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; self.configuration.autoTrackSessions = NO; self.tracker = [[BugsnagSessionTracker alloc] initWithConfig:self.configuration postRecordCallback:nil]; } diff --git a/Tests/BugsnagSessionTrackerTest.m b/Tests/BugsnagSessionTrackerTest.m index 1bd383416..a0deef191 100644 --- a/Tests/BugsnagSessionTrackerTest.m +++ b/Tests/BugsnagSessionTrackerTest.m @@ -28,7 +28,7 @@ @implementation BugsnagSessionTrackerTest - (void)setUp { [super setUp]; - self.configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + self.configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [self.configuration deletePersistedUserData]; self.sessionTracker = [[BugsnagSessionTracker alloc] initWithConfig:self.configuration postRecordCallback:nil]; diff --git a/Tests/BugsnagSinkTests.m b/Tests/BugsnagSinkTests.m index 99a8c3693..d7b69634a 100644 --- a/Tests/BugsnagSinkTests.m +++ b/Tests/BugsnagSinkTests.m @@ -36,7 +36,7 @@ - (void)setUp { self.rawReportData = [NSJSONSerialization JSONObjectWithData:contentData options:0 error:nil]; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.autoDetectErrors = NO; // This value should not appear in the assertions, as it is not equal to // the release stage in the serialized report @@ -319,7 +319,7 @@ - (NSDictionary *)reportFromHandledState:(BugsnagHandledState *)state { BugsnagEvent *report = [[BugsnagEvent alloc] initWithErrorName:@"TestError" errorMessage:@"Error for testing" - configuration:[[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil] + configuration:[[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1] metadata:[NSDictionary new] handledState:state session:nil]; @@ -402,7 +402,7 @@ - (void)testCallbackSpecified { BugsnagEvent *report = [[BugsnagEvent alloc] initWithErrorName:@"TestError" errorMessage:@"Error for testing" - configuration:[[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:nil] + configuration:[[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1] metadata:[NSDictionary new] handledState:state session:nil]; diff --git a/Tests/BugsnagTests.m b/Tests/BugsnagTests.m index b5f79b009..5abc37652 100644 --- a/Tests/BugsnagTests.m +++ b/Tests/BugsnagTests.m @@ -30,8 +30,7 @@ @implementation BugsnagTests * A boilerplate helper method to setup Bugsnag */ -(void)setUpBugsnagWillCallNotify:(bool)willNotify { - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; if (willNotify) { [configuration addOnSendBlock:^bool(BugsnagEvent * _Nonnull event) { return false; }]; } @@ -125,8 +124,7 @@ - (void)testGetMetadata { * or mocking is required to isolate and test the session pausing semantics. */ -(void)testBugsnagPauseSession { - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [configuration addOnSendBlock:^bool(BugsnagEvent * _Nonnull event) { return false; }]; [Bugsnag startBugsnagWithConfiguration:configuration]; @@ -142,8 +140,7 @@ - (void)testMutableContext { // Allow for checks inside blocks that may (potentially) be run asynchronously __block XCTestExpectation *expectation1 = [self expectationWithDescription:@"Localized metadata changes"]; - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; [configuration setContext:@"firstContext"]; [configuration addOnSendBlock:^bool(BugsnagEvent * _Nonnull event) { return false; }]; @@ -225,8 +222,7 @@ - (void)testRemoveOnSessionBlock { __block XCTestExpectation *expectation2 = [self expectationWithDescription:@"Remove On Session Block 2"]; expectation2.inverted = YES; - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // non-sending bugsnag [configuration addOnSendBlock:^bool(BugsnagEvent * _Nonnull event) { return false; }]; @@ -262,8 +258,7 @@ - (void)testAddOnSessionBlock { __block XCTestExpectation *expectation2 = [self expectationWithDescription:@"Remove On Session Block 3X"]; expectation2.inverted = YES; - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; configuration.autoTrackSessions = NO; // non-sending bugsnag @@ -308,8 +303,7 @@ - (void) testOnSendBlocks { __block int called = 0; // A counter // Prevent sending events - NSError *error; - BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error:&error]; + BugsnagConfiguration *configuration = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; // We'll not be able to use the onSend -> false route to fail calls to notify() [configuration setEndpointsForNotify:@"http://not.valid.bugsnag/not/an/endpoint" sessions:@"http://not.valid.bugsnag/not/an/endpoint"]; diff --git a/UPGRADING.md b/UPGRADING.md index 71825f1cb..ceb34d91c 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -8,17 +8,14 @@ Guide to ease migrations between significant changes #### Instantiation -Initializing a configuration now requires a valid API key, setting an error -parameter if initialization fails. In Swift, creating a configuration is now -handled via the `try` mechanism. +Initializing a configuration requires a valid API key. ```objc NSError *error; -BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:@"YOUR API KEY HERE" - error:&error]; +BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:@"YOUR API KEY HERE"]; ``` ```swift - let config = try BugsnagConfiguration("YOUR API KEY HERE") + let config = BugsnagConfiguration("YOUR API KEY HERE") ``` The exact error is available using the `BSGConfigurationErrorDomain` and diff --git a/features/fixtures/ios-swift-cocoapods/iOSTestApp/AppDelegate.swift b/features/fixtures/ios-swift-cocoapods/iOSTestApp/AppDelegate.swift index c2aa83263..f3e0662a0 100644 --- a/features/fixtures/ios-swift-cocoapods/iOSTestApp/AppDelegate.swift +++ b/features/fixtures/ios-swift-cocoapods/iOSTestApp/AppDelegate.swift @@ -47,20 +47,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } internal func prepareConfig(apiKey: String, mockAPIPath: String) -> BugsnagConfiguration { - do { - if let config = try BugsnagConfiguration(apiKey) { - // Enabling by default to check not only the OOM reporting tests but - // also that extra reports aren't erroneously sent in other conditions - // when OOM reporting is enabled - config.enabledErrorTypes.insert(.OOMs) - config.setEndpoints(notify: mockAPIPath, sessions: mockAPIPath) - return config - } - } - catch { - assert(false) - } - fatalError("Unable to create BugsnagConfiguration") + let config = BugsnagConfiguration(apiKey) + // Enabling by default to check not only the OOM reporting tests but + // also that extra reports aren't erroneously sent in other conditions + // when OOM reporting is enabled + config.enabledErrorTypes.insert(.OOMs) + config.setEndpoints(notify: mockAPIPath, sessions: mockAPIPath) + return config } func triggerEvent(scenario: Scenario, delay: TimeInterval, mode: String) { diff --git a/iOS/Bugsnag.xcodeproj/project.pbxproj b/iOS/Bugsnag.xcodeproj/project.pbxproj index dab34d044..3a798573e 100644 --- a/iOS/Bugsnag.xcodeproj/project.pbxproj +++ b/iOS/Bugsnag.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 000DF29423DB4B4900A883CE /* TestConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 000DF29323DB4B4900A883CE /* TestConstants.m */; }; 000E6E9E23D8690F009D8194 /* BugsnagSwiftConfigurationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000E6E9D23D8690F009D8194 /* BugsnagSwiftConfigurationTests.swift */; }; 000E6EA323D8AC8C009D8194 /* UPGRADING.md in Resources */ = {isa = PBXBuildFile; fileRef = 000E6E9F23D8AC8C009D8194 /* UPGRADING.md */; }; 000E6EA423D8AC8C009D8194 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 000E6EA023D8AC8C009D8194 /* README.md */; }; @@ -420,7 +419,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 000DF29323DB4B4900A883CE /* TestConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestConstants.m; sourceTree = ""; }; 000E6E9B23D84DB1009D8194 /* BugsnagTestConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BugsnagTestConstants.h; path = ../../Tests/BugsnagTestConstants.h; sourceTree = ""; }; 000E6E9C23D8690E009D8194 /* Tests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Bridging-Header.h"; sourceTree = ""; }; 000E6E9D23D8690F009D8194 /* BugsnagSwiftConfigurationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugsnagSwiftConfigurationTests.swift; sourceTree = ""; }; @@ -807,7 +805,6 @@ 8A2C8F951C6BC08600846019 /* report.json */, 000DF29223DB4A6B00A883CE /* Swift Tests */, E70EE0891FD7047D00FA745C /* KSCrash */, - 000DF29323DB4B4900A883CE /* TestConstants.m */, 00D7ACAC23E9C63000FBE4A7 /* BugsnagTests.m */, 00F9393723FC4F63008C7073 /* BugsnagTestsDummyClass.h */, 00F9393823FC4F64008C7073 /* BugsnagTestsDummyClass.m */, @@ -1320,7 +1317,6 @@ E733A76F1FD709B7003EAA29 /* KSCrashReportStore_Tests.m in Sources */, E70EE0781FD7039E00FA745C /* RFC3339DateTool_Tests.m in Sources */, 8A530CC422FDD51F00F0C108 /* KSCrashIdentifierTests.m in Sources */, - 000DF29423DB4B4900A883CE /* TestConstants.m in Sources */, 8A4E733F1DC13281001F7CC8 /* BugsnagConfigurationTests.m in Sources */, E784D25A1FD70C25004B01E1 /* KSJSONCodec_Tests.m in Sources */, 009131BC23F46279000810D9 /* BugsnagMetadataTests.m in Sources */, diff --git a/iOS/BugsnagTests/BSGOutOfMemoryWatchdogTests.m b/iOS/BugsnagTests/BSGOutOfMemoryWatchdogTests.m index 7233229e4..afe9f57e6 100644 --- a/iOS/BugsnagTests/BSGOutOfMemoryWatchdogTests.m +++ b/iOS/BugsnagTests/BSGOutOfMemoryWatchdogTests.m @@ -28,7 +28,7 @@ @implementation BSGOutOfMemoryWatchdogTests - (void)setUp { [super setUp]; - BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1 error: nil]; + BugsnagConfiguration *config = [[BugsnagConfiguration alloc] initWithApiKey:DUMMY_APIKEY_32CHAR_1]; config.autoDetectErrors = NO; config.codeBundleId = @"codeBundleIdHere"; config.releaseStage = @"MagicalTestingTime"; diff --git a/iOS/BugsnagTests/Swift Tests/BugsnagSwiftConfigurationTests.swift b/iOS/BugsnagTests/Swift Tests/BugsnagSwiftConfigurationTests.swift index eeb0f7f26..634ded092 100644 --- a/iOS/BugsnagTests/Swift Tests/BugsnagSwiftConfigurationTests.swift +++ b/iOS/BugsnagTests/Swift Tests/BugsnagSwiftConfigurationTests.swift @@ -16,22 +16,7 @@ class BugsnagSwiftConfigurationTests: XCTestCase { * (read: longer) ObjC invocation). */ func testDesignatedInitializerHasCorrectNS_SWIFT_NAME() { - - do { - let _ = try BugsnagConfiguration(DUMMY_APIKEY_16CHAR) - XCTFail("Erronoeusly initialized a BugsnagConfiguration object with an invalid apiKey") - } - catch let e as NSError { - XCTAssertEqual(e.domain, BSGConfigurationErrorDomain) - XCTAssertEqual(e.code, BSGConfigurationErrorCode.invalidApiKey.rawValue) - } - - do { - let config = try BugsnagConfiguration(DUMMY_APIKEY_32CHAR_1) - XCTAssertEqual(config?.apiKey, DUMMY_APIKEY_32CHAR_1) - } - catch let e as NSError { - XCTFail("Failed to initialize a BugsnagConfiguration object with a correct apiKey: \(e.domain), \(e.code)") - } + let config = BugsnagConfiguration(DUMMY_APIKEY_16CHAR) + XCTAssertEqual(config.apiKey, DUMMY_APIKEY_16CHAR) } } diff --git a/iOS/BugsnagTests/Swift Tests/BugsnagSwiftTests.swift b/iOS/BugsnagTests/Swift Tests/BugsnagSwiftTests.swift index 083b8eb2e..d470dd8f0 100644 --- a/iOS/BugsnagTests/Swift Tests/BugsnagSwiftTests.swift +++ b/iOS/BugsnagTests/Swift Tests/BugsnagSwiftTests.swift @@ -15,22 +15,16 @@ class BugsnagSwiftTests: XCTestCase { * Confirm that the addMetadata() method is exposed to Swift correctly */ func testAddMetadataToSectionIsExposedToSwiftCorrectly() { - do { - if let configuration = try BugsnagConfiguration(DUMMY_APIKEY_32CHAR_1) { - Bugsnag.start(with: configuration) - Bugsnag.addMetadata("mySection1", key: "myKey1", value: "myValue1") - - let exception1 = NSException(name: NSExceptionName(rawValue: "exception1"), reason: "reason1", userInfo: nil) - - Bugsnag.notify(exception1) { (event) in - // Arbitrary test, replicating the ObjC one - let value = (event.metadata["mySection1"] as? [String : Any])?["myKey1"] as? String - XCTAssertEqual(value, "myValue1") - } - } - } - catch let e as NSError { - XCTFail("Failed to check method Swift exposure: \(e.debugDescription)") + let configuration = BugsnagConfiguration(DUMMY_APIKEY_32CHAR_1) + Bugsnag.start(with: configuration) + Bugsnag.addMetadata("mySection1", key: "myKey1", value: "myValue1") + + let exception1 = NSException(name: NSExceptionName(rawValue: "exception1"), reason: "reason1", userInfo: nil) + + Bugsnag.notify(exception1) { (event) in + // Arbitrary test, replicating the ObjC one + let value = (event.metadata["mySection1"] as? [String : Any])?["myKey1"] as? String + XCTAssertEqual(value, "myValue1") } } @@ -38,7 +32,7 @@ class BugsnagSwiftTests: XCTestCase { * Confirm that the clearMetadata() method is exposed to Swift correctly */ func testClearMetadataInSectionIsExposedToSwiftCorrectly() { - try! Bugsnag.start(with: BugsnagConfiguration(DUMMY_APIKEY_32CHAR_1)!) + Bugsnag.start(with: BugsnagConfiguration(DUMMY_APIKEY_32CHAR_1)) // We don't need to check method's functioning, only that we can call it this way Bugsnag.clearMetadata(section: "testSection") } diff --git a/iOS/BugsnagTests/TestConstants.m b/iOS/BugsnagTests/TestConstants.m deleted file mode 100644 index ab3c4889f..000000000 --- a/iOS/BugsnagTests/TestConstants.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// TestConstants.m -// Tests -// -// Created by Robin Macharg on 24/01/2020. -// Copyright © 2020 Bugsnag. All rights reserved. -// - -#import -#import "BugsnagConfiguration.h" - -@interface TestConstants : XCTestCase - -@end - -@implementation TestConstants - -- (void)testConfigurationConstants { - XCTAssertTrue([BSGConfigurationErrorDomain isEqualToString:@"com.Bugsnag.CocoaNotifier.Configuration"]); - XCTAssertEqual(BSGConfigurationErrorInvalidApiKey, 0); -} - -@end diff --git a/tvOS/Bugsnag.xcodeproj/project.pbxproj b/tvOS/Bugsnag.xcodeproj/project.pbxproj index 9d979e18b..9642d8604 100644 --- a/tvOS/Bugsnag.xcodeproj/project.pbxproj +++ b/tvOS/Bugsnag.xcodeproj/project.pbxproj @@ -16,7 +16,6 @@ 00D7ACA023E97FBD00FBE4A7 /* BugsnagEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 00D7AC9E23E97FBD00FBE4A7 /* BugsnagEvent.m */; }; 00D7ACA123E97FBD00FBE4A7 /* BugsnagEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 00D7AC9F23E97FBD00FBE4A7 /* BugsnagEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 00D7ACA723E98A5D00FBE4A7 /* BugsnagEventTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00D7ACA623E98A5D00FBE4A7 /* BugsnagEventTests.m */; }; - 00D7ACAA23E98A9A00FBE4A7 /* TestConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 00D7ACA823E98A9A00FBE4A7 /* TestConstants.m */; }; 00D7ACAB23E98A9A00FBE4A7 /* BugsnagEventFromKSCrashReportTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 00D7ACA923E98A9A00FBE4A7 /* BugsnagEventFromKSCrashReportTest.m */; }; 00F9393623FC16DA008C7073 /* BugsnagBaseUnitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F9393523FC16DA008C7073 /* BugsnagBaseUnitTest.m */; }; 00F9393F23FD2DDB008C7073 /* BugsnagTestsDummyClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F9393E23FD2DDB008C7073 /* BugsnagTestsDummyClass.m */; }; @@ -1012,7 +1011,6 @@ E7CE79021FD94F1B001D07E0 /* RFC3339DateTool_Tests.m in Sources */, 4B3CD2BE22C5676800DBFF33 /* RegisterErrorDataTest.m in Sources */, E7CE78F91FD94F1B001D07E0 /* KSSystemInfo_Tests.m in Sources */, - 00D7ACAA23E98A9A00FBE4A7 /* TestConstants.m in Sources */, 4B3CD2BB22C5676800DBFF33 /* BSGOutOfMemoryWatchdogTests.m in Sources */, E7CE78F41FD94F1B001D07E0 /* KSFileUtils_Tests.m in Sources */, 00F9393F23FD2DDB008C7073 /* BugsnagTestsDummyClass.m in Sources */,